【发布时间】:2017-10-20 13:12:34
【问题描述】:
我有 2 个这样的实体:
@SQLDelete(sql = "UPDATE parent_table SET deleted = true WHERE id = ?")
public class Parent {
private boolean deleted;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "parent_id")
private List<Child> children;
// other stuff
}
@SQLDelete(sql = "UPDATE child_table SET deleted = true WHERE id = ?")
public class Child {
private boolean deleted;
// stuff
}
如您所见,它是一个单向的@OneToMany 映射,并且两个实体都使用带有@SQLDelete 注释的软删除。
我正在尝试软删除父级,进而希望子级也被软删除。
当我尝试软删除时,它会将两个表中的 deleted 标志设置为 true,这就是我想要的。
但是,当我执行删除时,child_table 中的parent_id 设置为null。为什么会发生这种情况,我该如何阻止这种情况?
删除操作:
Parent parent= entityManager.find(Parent.class, id);
entityManager.remove(parent);
【问题讨论】:
-
父级正在被删除,它应该是这样吗?寻找级联删除。
-
删除标志已设置,这正是我想要的。但是hibernate也破坏了父子关系,通过将
child_table中的外键设置为null。 -
在将删除操作从父级级联到私有子级时破坏父子关系是合乎逻辑的,Hibernate 不知道(或关心)来自
@SQLDelete的查询做了什么。出于这个原因,我强烈怀疑你的要求是不可能的。 -
“如您所见,它是一个单向的@OneToOne 映射”。好吧,我看不到代码建议
@OneToMany。 -
@alan 已编辑..谢谢