在级联删除时设置为null

时间:2015-06-21 14:02:43

标签: jpa cascade

有三个表,t1, t2t3。 t1由t2.fk2引用,t2由t3.fk3引用。第一个关系设置为Cascading.ALL,因此删除一行t1将同时删除一个相关的t2行。但是如何在删除t2时设置t3的null? (t2可以直接删除,并从t1删除级联删除)。

这可以在MySQL中轻松完成,但在JPA中,我真的不知道该怎么做。我寻找答案,@PreRemoveorphanRemoval=true可以解决我的问题?

感谢十亿人!

1 个答案:

答案 0 :(得分:0)

将字段手动设置为null可以起作用,例如t2.getT3XXField().setT2XXField(null)

您还可以在@PreRemove中使用t2回调来执行此操作。

@PreRemove
public void preRemove(){

    T3Field.setT2Field(null);
}

两种方式都有效。另外,不要在t2上使用Cascade.ALLREMOVE来获取t3,因为删除t2将删除t3实体,但在这种情况下,我们不希望将t3设置为null。