hibernate - 连接表的唯一约束

标签 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:重复条目

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

hibernate :3.6.4.Final

MySQL:5.0.21

最佳答案

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

关于hibernate - 连接表的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12771383/

相关文章:

java - spring jpa hibernate 写入数据库失败 - 无事务

java - 在*多线程* Swing 应用程序中使用 Hibernate 进行 session 管理

java - 在 JPA 中映射 Map<Entity, Entity> 结果表中不存在于该描述符中

hibernate - 更新 hibernate 数据实例时捕获错误

mysql - 简单的 hibernate 不起作用,但级联查询可以

hibernate - 如何比较 HQL 中的日期?

java - Spring Data : issue with OneToMany, 子级未正确保存

java - 没有名为 EclipseLink_JPA 的 EntityManager 持久性提供程序

java - 以关键字作为名称截断表

java - @ManyToMany 与 EclipseLink 2.5.2 和 Jackson 2.4.4