当我读到级联和逆时,据说两者都在做完全不同的事情。 级联:在级联中,完成一个操作(保存、更新和删除)后,决定是否需要调用另一个彼此有关系的实体的其他操作(保存、更新和删除)。 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/