首页 > 解决方案 > Hibernate 在更新子实体时不会更新子实体

问题描述

如果它很重要,我正在使用带有 java 11 的 oracle DB 的休眠。

我有一个触发器,它将更新我的parentchild表格中的一个单元格,当表格更新时将触发。

我遇到了这个问题,当我更新我的grandson实体时,它不会更新我的child实体,但会更新我的parent实体。

我希望 hibernate 向上更新已更改实体的行及其每个祖先。

我的代码中的所有更新都是在Parent实体上进行的。这意味着如果我想更改grandson名称,我parent将从数据库中查询我的名称,我将更改所需字段并使用saveAndFlush.

我的代码:

class Parent {
   @Id
   @Gene...
   private Long id;

   @OneToMany(fetch = FetchType.EAGER, cascade = Cascade.ALL, orphanRemoval = true)
   @JoinColumn(name = "parent_id", nullable = false)
   @Fetch(FetchMode.SUBSELECT)
   private List<Child> children;
}

class Child {
   @Id
   @Gene...
   private Long id;

   @OneToMany(fetch = FetchType.EAGER, cascade = Cascade.ALL, orphanRemoval = true)
   @JoinColumn(name = "child_id")
   @Fetch(FetchMode.SUBSELECT)
   private List<Grandson> grandsons = new ArrayList<>();

   @OneToOne(fetch = FetchType.EAGER, cascade = Cascade.ALL, orphanRemoval = true)
   @JoinColumn(name = "spouse_id", referencedColumnName)
   private Person spouse;
}

class Grandson {
   @Id
   @Gene...
   private Long id;

   String name;
}

当我更新grandsonspouse它会parent触发触发器,但不是child触发器!我希望它触发更新的实体及其所有祖先触发器(孙子没有触发器)。

我在网上搜索了 2 天,找不到有用的东西。我试图在 grandsonor上创建一个新触发器,spouse但由于“检测到并回滚了活动的自主事务”,它在数据库中引发了异常。

谢谢 :)

标签: javaspringhibernate

解决方案


推荐阅读