有三个表,t1, t2
和t3
。 t1由t2.fk2
引用,t2由t3.fk3
引用。第一个关系设置为Cascading.ALL
,因此删除一行t1将同时删除一个相关的t2行。但是如何在删除t2时设置t3的null? (t2可以直接删除,并从t1删除级联删除)。
这可以在MySQL中轻松完成,但在JPA中,我真的不知道该怎么做。我寻找答案,@PreRemove
,orphanRemoval=true
可以解决我的问题?
感谢十亿人!
答案 0 :(得分:0)
将字段手动设置为null可以起作用,例如t2.getT3XXField().setT2XXField(null)
。
您还可以在@PreRemove
中使用t2
回调来执行此操作。
@PreRemove
public void preRemove(){
T3Field.setT2Field(null);
}
两种方式都有效。另外,不要在t2上使用Cascade.ALL
或REMOVE
来获取t3,因为删除t2将删除t3实体,但在这种情况下,我们不希望将t3设置为null。