gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:10:58 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com