Hibernate 联接表上的唯一约束

Hibernate 联接表上的唯一约束,hibernate,jpa,Hibernate,Jpa,我有一个用户,他有很多书: public class User { @OneToMany @Cascade( { org.hibernate.annotations.CascadeType.ALL }) @JoinTable(name="user_book") private Set<Book> books; } 问题是唯一约束仅位于book\u id列上。 这意味着2个用户不能拥有同一本书。 如果我想添加到用户(id:1)一本书(id:1),那

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

public class User {

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

}
问题是唯一约束仅位于
book\u id
列上。 这意味着2个用户不能拥有同一本书。 如果我想添加到
用户(id:1)
一本
书(id:1)
,那么我得到了:
BatchUpdateException:Duplicate entry

这正常吗?还是这是臭虫? 若不是bug,那个么我如何配置hibernate来创建对的唯一约束(
user\u id
book\u id
),而不仅仅是对联接表中的
book\u id

休眠:
3.6.4.最终版


MySQL:
5.0.21

您的关联对许多人来说都是一个关联。这意味着一个用户可以拥有多本书。如果您希望一本书能够由多个用户共享,请将其设置为多人关联:一个用户将有多本书,而一本书将有多个用户

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