8

多くの本を持っているユーザーがいます:

public class User {

    @OneToMany
    @Cascade( { org.hibernate.annotations.CascadeType.ALL })
    @JoinTable(name="user_book")
    private Set<Book> books;

}

これにより、データベースに結合テーブルが作成されます。

|user_id|book_id|
-----------------
|1      |2      |
|1      |3      |
|2      |1      |  

問題は、一意の制約が列にのみあることです。book_idつまり、2 人のユーザーが同じ本を持つことはできません。に追加したい場合はuser(id:1)、次のようbook(id:1)になりました。BatchUpdateException: Duplicate entry

これは正常ですか?またはこれはバグですか?バグでない場合は、結合テーブルだけでなく、ペア ( user_id、 )に一意の制約を作成するように休止状態を構成する方法を教えてください。book_idbook_id

休止状態:3.6.4.Final

MySQL:5.0.21

4

1 に答える 1

24

あなたの協会は1対多です。これは、1人のユーザーが多くの本を持つことができることを意味します。書籍を複数のユーザーで共有できるようにする場合は、ManyToManyアソシエーションにします。ユーザーには複数の書籍があり、1つの書籍には複数のユーザーがいます。

于 2012-10-07T18:08:53.860 に答える