私は従来のデータベースを扱っています。そして私はpojos &冬眠& HSQLDBを使ってユニットテストを書いています。複合キーのないHibernateのManyToMany
17:09:03,946 ERROR SchemaExport:349 - Attempt to define a second primary key in statement
するのは、私が(もちろん、そのテーブルposts
とtags
)Post
とTag
エンティティを持っているとしましょう:私は、次のエラーを取得しています。そしてpost_tags
と呼ばれるPost
とTag
の間に多対多を定義する別のテーブルがあります。
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
}
私はそれはHibernateがPRIMARY KEY (post_id, tag_id)
を使用して複合キーを作成しようとしている、ともそれを作るしようとしたと思われるエラーが発生し声明を見てpost_id
identity
。
問題を解決するのに手伝ってくれる人はいますか?
UPDATE:
私は、従来のデータベースを扱っていますので、これは問題を実証するための一例に過ぎでした。問題は、クラスPostTag
に@Idある
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文のラインを投稿してくださいすることができあまりにも?エラーの原因は? –