当前位置: 首页 > 知识库问答 >
问题:

Hibernate inverse=“true”保存父对象在级联=“all”时保存子对象

奚光霁
2023-03-14

当我读到cascade和inverse时,有人说它们都在做完全不同的事情。级联:在级联中,在一个操作(保存、更新和删除)完成后,它决定是否需要调用其他操作(保存、更新和删除)对其他相互有关系的实体。反向:这用于决定哪一方是管理关系的关系所有者(插入或更新外键列)。

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

那个么,若级联改变了逆矩阵的行为,它们又有什么不同呢?

共有1个答案

鞠晋
2023-03-14

让我们举个例子:

  • 一个订单有多条线:OneTo多个关联
  • 许多行共享一个父命令:ManyToOne关联

所有者端是Line。反面是order。

这意味着,如果您持久化一个订单,持久化一行,则将该行添加到集合订单。行,但不设置行。顺序,Hibernate将认为这两个实体之间不存在关联。为什么?因为您只设置关联的反向端(Order.Line),而不设置所有者端(Line.Order)。

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

 类似资料:
  • 我看了很多关于这个主题的帖子,但一直无法解决它=( 我正在尝试保存具有一对多关系的父级及其子级。我相信我正在遵循其他帖子中的留档和其他建议。然而,我遇到的问题是,当Hibernate尝试保存子记录时,它在父级中插入FK的“0”,而不是真正的id。 父hbm。xml映射 孩子hbm。xml映射 保存对象的Java代码 因此,它将用正确的id(下一个seq值,比如273)保存父对象,但当它去尝试保存子

  • 我有一个叫做玩家的模式和另一个叫做游戏的模式。每个游戏都有一个名为玩家的属性,它是对玩家对象的引用数组。 游戏架构 球员模式 MongoDb连接 用于在post路线上初始化游戏和玩家的代码。(我正在使用Express) 在节点控制台的终端上,当我创建5个播放器时,我有以下输出: 新玩家加入 新玩家加入 新玩家加入 新玩家加入 新玩家加入 现在,当我转到mongo控制台并查看玩家集合时,我发现有5个

  • 我在保存具有ManyToOne双向关系的实体时遇到问题,如下所示: 警告:HHH000437:试图保存一个或多个与未保存的瞬态实体具有不可为空的关联的实体。在保存这些从属实体之前,必须在操作中保存未保存的瞬态实体。未保存的临时实体:([com . epam . apartments booking . model . city # 912])依赖实体:([[com . epam . apartme

  • 我正在学习SpringJPA,我从将对象映射到表开始。我对OneToOne和OneToMany的关系没有问题,但我不太明白为什么我不能预先列出一个与许多关系相关的对象。我有一本可以有很多作者的书,还有一本可以有很多书的作者。通过中间表book_author正确生成模式(我可以在MySql Workbench中看到),但我得到以下示例: Hibernate:在作者(名字、姓氏)中插入值(?,) Hi

  • 所以今天我正在为Minecraft服务器开发一个插件。为此,我创建了一个“Track”类,它表示一条赛车道。为了存储所有现有的轨道与他们的数据,我想保存整个轨道对象,这使一切对我更容易。总之,我在我的Track类中实现了Serializable,以便稍后使用ObjectOutputStream。当我开始保存轨迹时,Java创建了一个对象文件,但它也会给我一个警告/错误: 14:19:00][服务器