![](/img/trans.png)
[英]Hibernate OneToMany relationship sets foreign key to null when inserting entity
[英]Hibernate soft delete sets foreign key to null
我有 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);
我不确定您想要的是否可行,但您可以尝试将其添加到您的映射中:
@OnDelete(action = OnDeleteAction.NO_ACTION)
也许这个 Hibernate 不会改变这种关系。
作为解决方法,您可以关闭级联删除并手动删除子项
你需要:
@OneToMany(cascade = CascadeType.ALL)
替换为@OneToMany(cascade = CascadeType.PERSIST)
。nullable = false
添加到@JoinColumn(name = "parent_id")
注释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.