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)a book(id:1),那么我得到:BatchUpdateException: Duplicate entry

这是正常的吗?或者这是错误?如果不是错误,我如何配置休眠以在对(user_idbook_id)上创建唯一约束,而不仅仅是book_id在连接表中。

休眠:3.6.4.Final

MySQL:5.0.21

4

1 回答 1

24

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

于 2012-10-07T18:08:53.860 回答