我正在处理遗留数据库。我正在使用pojos编写单元测试& hibernate & HSQLDB。而且我收到以下错误:ManyToMany在休眠没有复合键
17:09:03,946 ERROR SchemaExport:349 - Attempt to define a second primary key in statement
比方说,我有Post
和Tag
实体(当然,他们的桌子posts
和tags
)。另外还有一张表,用于定义Post
和Tag
之间的多对多,称为post_tags
。
因为post_tags
包含关于该关系的一些额外信息,如active
和deleted
列。我创建了另一个实体PostTag
来处理这个问题。
来形容这里我的问题是伪类:
@Entity
@Table(name="post_tags")
public class PostTag {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@ManyToOne
private Post post;
@ManyToOne
private Tag tag;
// setters and getters
}
@Entity
@Table(name = "tags")
public class Tag {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@ManyToMany(mappedBy = "tags",cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private Set<Post> posts;
// setters and getters
}
@Entity
@Table(name = "posts")
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@ManyToMany
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
@JoinTable(name = "post_tags", joinColumns = { @JoinColumn(name = "post_id") }, inverseJoinColumns = { @JoinColumn(name = "tag_id") })
private Set<Tag> tags;
// setters and getters
}
当我看着生成似乎休眠正在努力使使用PRIMARY KEY (post_id, tag_id)
复合键,并且还试图让错误的语句post_id
identity
。
任何人都可以帮助我解决我的问题吗?
UPDATE:
因为我处理旧的数据库,这是只是为了说明问题的例子。不过,我会尽量根据例子翻译的实际陈述(PS:这不是ALTER TABLE
这是一个CREATE TABLE
):
create table post_tags (id integer not null, post integer, tag integer, post_id integer generated by default as identity (start with 1), tag_id integer not null, primary key (post_id, tag_id)
能否请您发布ALTER TABLE线,太?导致错误的那个? – 2009-05-27 14:55:49