java - Hibernate逆="true"在级联="all"时保存父级保存子级

标签 java hibernate

当我读到级联和逆时,据说两者都在做完全不同的事情。 级联:在级联中,完成一个操作(保存、更新和删除)后,决定是否需要调用另一个彼此有关系的实体的其他操作(保存、更新和删除)。 Inverse:用于决定哪一方是关系所有者来管理关系(外键列的插入或更新)。

假设我拯救了有一些 child 的 parent 。因此,当我一方面使用 inverse="true"cascade="all"设置一对多时,我希望该 child 是该关系的所有者,因此保存父级应该更改子级集合,但是当我 添加cascade =“all” hibernate 会改变这种行为并保留 child 。

那么如果级联改变逆的行为,它们有何不同?

最佳答案

举个例子:

  • 一个订单有多个行:OneToMany 关联
  • 多行共享一个父订单:ManyToOne 关联

所有者方是 Line。反面是顺序。

这意味着,如果您保留一个 Order,则保留一个 Line,将该行添加到集合 Order.lines 中,但不要'如果设置 Line.order,Hibernate 会认为这两个实体之间不存在关联。为什么?因为您只设置了关联的反面 (Order.lines),而不是所有者面 (Line.order)。

Cascade 与此无关。假设 Order.lines 使用 cascade=PERSIST 进行注释。这意味着,如果您创建一个 Order,请创建一个 Line,将 Line 添加到 Order.lines,然后持久化 Order,Hibernate 也会自动调用 Line 上的 persist()。因此,Line 将被持久化,而不必使用该行显式调用 persist()。但是两个实体之间的关联仍然不会保存在数据库中,因为您还没有设置关联的所有者端:Line.order

关于java - Hibernate逆="true"在级联="all"时保存父级保存子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32378353/

相关文章:

java - netbeans运行错误:Failed to execute goal org. codehaus.mojo :exec-maven-plugin:1. 2.1

java - Struts + hibernate : large memory consumption arise during reading big data arrays

java - 与父实体一起驱逐依赖集合

java - 为什么 Spring Data 会进行过多的查询?

java - Spring Autowiring 仅扫描测试文件

java webpart 像asp.net 一样吗?

java - 使用 appium 将元素滚动到 View 中不适用于 iOS

java - Google App Engine - 低级数据存储 API 标志?

java - javaw.exe 的多个实例

hibernate - 不使用 Grails 查询缓存