连接表的唯一约束

时间:2012-10-07 18:05:29

标签: hibernate jpa

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

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

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

Hibernate:3.6.4.Final

MySQL:5.0.21

1 个答案:

答案 0 :(得分:22)

您的关联是 One To Many。这意味着一个用户可以拥有多本书籍。如果您希望能够让多个用户共享一本书,请将其设置为ManyToMany关联:用户将拥有多本书籍,而一本书将拥有多个用户。