質問

私を扱うレガシーデータベースです。とを皆様にお伝えしたくて書き込みユニットを用いた試験pojos&hibernate& HSQLDB.とろ以下のエラー:

17:09:03,946 ERROR SchemaExport:349 - Attempt to define a second primary key in statement

ということかしていま PostTag 法とそのテーブル poststags).別のテーブルを定義する多対多間 PostTag という post_tags.

ので post_tags 含むに関する情報の関係のように、 activedeleted 列あります。作成した他の事業体という 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)
役に立ちましたか?

解決

問題は、@Idのクラス PostTag:ように、hibernateがんの発生本人colum.同時に、なんて言っていただくための複合キーにマッピングの tags 分野のクラス Posts.

あむちゃくちゃ親切です。Hibernateできない伝えていきます。

が非常に良い例304ページの著書"Java PersistenceとHibernate". このGoogleの書籍.

きたいと思っている合成し扱わなければなら、リンクテーブルとして実物と利用 PostTag のクラス PostsSet<PostTag> postTags の代わりに Set<Tag> tags)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top