Hibernate中的许多人没有复合键

Hibernate中的许多人没有复合键,hibernate,hsqldb,many-to-many,composite-key,Hibernate,Hsqldb,Many To Many,Composite Key,我正在处理遗留数据库。我正在使用pojos&hibernate&HSQLDB编写单元测试。我得到了以下错误: 17:09:03,946 ERROR SchemaExport:349 - Attempt to define a second primary key in statement 当我查看生成错误的语句时,Hibernate似乎正在尝试使用主键(post\u id,tag\u id)生成复合键,并且它还尝试生成post\u id标识 有人能帮我解决问题吗 更新: 因为我处理的是一个遗留数

我正在处理遗留数据库。我正在使用pojos&hibernate&HSQLDB编写单元测试。我得到了以下错误:

17:09:03,946 ERROR SchemaExport:349 - Attempt to define a second primary key in statement 当我查看生成错误的语句时,Hibernate似乎正在尝试使用
主键(post\u id,tag\u id)
生成复合键,并且它还尝试生成
post\u id
标识

有人能帮我解决问题吗

更新:

因为我处理的是一个遗留数据库,所以这只是一个演示问题的示例。但我将尝试根据示例翻译实际语句(PS:它不是
altertable
,而是
createtable
):


问题在于类
PostTag
中的@Id:它告诉hibernate您需要一个生成的标识栏。同时,您正在使用类
Posts
中的
tags
字段的映射来表示“我想要一个复合键”

你想要哪一个?冬眠不知道

在《Java持久化与Hibernate》一书的第304页有一个非常好的例子


如果不需要复合键,则必须将链接表视为真实对象,并在类
Posts
中使用
PostTag
(即
Set postTags
而不是
Set tags

也可以发布ALTER table行吗?导致错误的那个?我不想要复合密钥。如何在没有复合键的情况下进行多个映射?
@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
}
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)