为什么来自非级联实体的级联实体会在保存操作中持久化?

时间:2021-04-14 22:52:10

标签: java hibernate jpa

我使用 Hibernate 已经很长时间了。今天我经历了一些我无法解释的事情。我保存了一个没有级联到相关实体的实体。相关的非级联实体与一些新的/非级联实体有级联关系,虽然他们的实体模型在持久化后没有更新,但它们被保存到数据库中!

以下是游戏中实体的要点:

  • 一个计划有 1 个以上的步骤,一个步骤正好属于 1 个计划
  • 一个计划有 0 个以上的日志事件
  • 一个步骤有 0+ 个日志事件
  • 日志事件具有关联的步骤或计划,但不能同时具有关联的步骤或计划
  • 计划与其步骤之间没有级联
  • Cascade = ALL 用于计划 => 日志
  • 级联 = ALL 用于步骤 => 日志
  • 没有为计划 => 步骤指定级联

Entity Relationship Diagram, I think

当我们的@Transactional 服务调用 planRepository.save(plan) 时,我希望将保存对计划及其相关日志的更新,但不会保存对步骤及其日志的任何更改。但是,我观察到的是该步骤新创建的日志已保存。步骤已经存在;我不确定这是否是一个重要的细节。所有日志都是新的。

如果我使用 EntityManager 创建“从日志”查询,它将为我提供这些步骤的持久日志。但是,如果我将计划返回给调用方法(在这种情况下是控制器),或者直接从 Hibernate 获取计划,则步骤的日志没有主键,而计划的日志有(这就是我想要的)期待)。

我很惊讶 Hibernate 正在保存这些步骤的日志。正在发生什么样的伏都教?这个可以配置吗?

0 个答案:

没有答案