如果有必要的话,我正在使用hibernate和oracledb以及java11。
我有个触发器可以更新我手机里的手机 parent
以及 child
更新表时将触发的表。
我有个问题,当我更新我的 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;
}
当我更新时 grandson
或者 spouse
它会点燃火焰 parent
触发器,但不是 child
触发!我希望它触发更新的实体和它的所有祖先触发器(孙子没有触发器)。
我在网上搜索了两天,却找不到有用的东西。我试着在上面创建一个新的触发器 grandson
或者 spouse
但是它在数据库中抛出了一个异常,因为“检测到并回滚了活动的自治事务”。
谢谢:)
暂无答案!
目前还没有任何答案,快来回答吧!