我有一位用户,他有很多书:
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_id
,book_id
)上创建唯一约束,而不仅仅是在连接表中的book_id
上。
Hibernate:3.6.4.Final
MySQL:5.0.21
答案 0 :(得分:22)
您的关联是 One To Many。这意味着一个用户可以拥有多本书籍。如果您希望能够让多个用户共享一本书,请将其设置为ManyToMany关联:用户将拥有多本书籍,而一本书将拥有多个用户。