私はレガシーデータベースを扱っています。そして、 pojos & hibernate & HSQLDBを使用して単体テストを書いています。そして、次のエラーが表示されます。
17:09:03,946 エラー SchemaExport:349 - ステートメントで 2 番目の主キーを定義しようとしています
私が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
}
エラーを生成するステートメントを見ると、Hibernate が を使用して複合キーを作成しようとしているように見えPRIMARY KEY (post_id, tag_id)
ますpost_id
identity
。
誰でも私の問題を解決するのを手伝ってもらえますか?
アップデート:
私は従来のデータベースを扱っているため、これは問題を示すための単なる例です。しかし、例に従って実際のステートメントを翻訳しようとします(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)