2009-05-27 13 views
1

私は従来のデータベースを扱っています。そして私はpojos &冬眠& HSQLDBを使ってユニットテストを書いています。複合キーのないHibernateのManyToMany

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

するのは、私が(もちろん、そのテーブルpoststagsPostTagエンティティを持っているとしましょう:私は、次のエラーを取得しています。そしてpost_tagsと呼ばれるPostTagの間に多対多を定義する別のテーブルがあります。

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_ididentity

問題を解決するのに手伝ってくれる人はいますか?

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) 
+0

あなたは、ALTER TABLE文のラインを投稿してくださいすることができあまりにも?エラーの原因は? –

答えて

2

:それはあなたがしたいことを休止状態に伝えます。しかし、私は一例によると、実際の声明(:それはそれはCREATE TABLEあるALTER TABLEないPS)を変換しようとします生成されたアイデンティティ列。同時に、Poststagsフィールドのマッピングを使用して「複合キーが必要です」というメッセージが表示されます。

どちらをお望みですか?休止状態は伝えられません。

「Java Persistence with Hibernate」という本の304ページの例があります。 It's on Google books

あなたが複合キーを使用しない場合、あなたは本物のオブジェクトとしてリンクテーブルを治療し、クラスPostsPostTagを使用しなければならない(すなわちSet<PostTag> postTags代わりSet<Tag> tagsの)

+0

さて、私はコンポジットキーを望んでいません。複合キーなしでManyToManyマッピングを実行するにはどうすればよいですか? – nimcap