连接表的唯一约束

chr*_*ris 8 hibernate jpa

我有一个用户,他有很多书:

public class User {

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

}
Run Code Online (Sandbox Code Playgroud)

这将在数​​据库中创建一个连接表:

|user_id|book_id|
-----------------
|1      |2      |
|1      |3      |
|2      |1      |  
Run Code Online (Sandbox Code Playgroud)

问题是唯一约束book_id列上.这意味着2个用户不能拥有相同的书.如果我想添加到user(id:1)a book(id:1),那么我得到:BatchUpdateException: Duplicate entry

这是正常的吗?或者这是错误?如果不是一个错误,我如何配置hibernate来创建唯一约束对(user_id,book_id)不仅book_id在连接表中.

休眠: 3.6.4.Final

MySQL的: 5.0.21

JB *_*zet 23

你的协会是一对一的.这意味着一个用户可以拥有许多书籍.如果您希望能够与多个用户共享一本书,请将其设为ManyToMany关联:用户将拥有多本书,而一本书将拥有多个用户.