Java 为什么非级联实体中的级联实体在保存操作中保持不变?
很长一段时间以来,我一直在断断续续地使用Hibernate。今天我经历了一些我无法解释的事情。我保存了一个没有级联到相关实体的实体。相关的非级联实体与一些新的/未级联的实体有关系,虽然它们的实体模型在持久化后没有更新,但它们被保存到数据库中 以下是正在发挥作用的实体的要点:Java 为什么非级联实体中的级联实体在保存操作中保持不变?,java,hibernate,jpa,Java,Hibernate,Jpa,很长一段时间以来,我一直在断断续续地使用Hibernate。今天我经历了一些我无法解释的事情。我保存了一个没有级联到相关实体的实体。相关的非级联实体与一些新的/未级联的实体有关系,虽然它们的实体模型在持久化后没有更新,但它们被保存到数据库中 以下是正在发挥作用的实体的要点: 一个计划有1个以上的步骤,而一个步骤恰好属于一个计划 计划有0多个日志事件 一个步骤有0多个日志事件 日志事件具有关联的步骤或计划,但不是两者都有 计划及其步骤之间没有级联 Cascade=ALL for plan=>日志
- 一个计划有1个以上的步骤,而一个步骤恰好属于一个计划
- 计划有0多个日志事件
- 一个步骤有0多个日志事件
- 日志事件具有关联的步骤或计划,但不是两者都有
- 计划及其步骤之间没有级联
- Cascade=ALL for plan=>日志
- Cascade=ALL for step=>日志
- 没有为计划=>步骤指定级联
我很惊讶Hibernate正在保存步骤的日志。到底是什么巫毒?这是可配置的吗?我不明白。您修改了一个持久实体,为什么不保存更改?计划与步骤之间没有级联,但步骤与日志之间有级联。当我保存计划时,它会保存步骤的日志,即使没有级联?此外,即使保存了日志,也不会填充它们的ID。如果我添加级联,就会填充ID,这就是我所期望的。在调用时,该步骤将被持久化,但日志不会被持久化。如果没有级联,我不希望在保存计划时日志被持久化。让我重复一下:对持久化实体的更改总是被保存的。
计划步骤是否包含持久实体?您是否对该集合中的对象进行了更改?不,这种行为是不可配置的,让我重复一下:从计划到步骤没有级联,但从步骤到日志有级联。当我保存计划时,它会保存步骤的日志,即使没有级联?此外,即使保存了日志,也不会填充它们的ID。如果我添加级联,就会填充ID,这就是我所期望的。在调用时,该步骤将被持久化,但日志不会被持久化。如果没有层叠,我不希望在保存计划时保存日志,因为步骤已经存在;我不确定这是否是一个重要的细节。“是的,这是一个关键的细节。步骤是持久性实体,这意味着您对它们所做的任何更改都将由Hibernate跟踪,并在事务结束时持久化。通过调用em.find()
、查询或通过将它们与另一个实体关联而获得对它们的访问权并不重要。如果对持久实体进行更改,这些更改将被保存