2015-06-21 74 views
0

有三個表,t1, t2t3。 t1由t2.fk2引用,並且t2由t3.fk3引用。第一個關係設置爲Cascading.ALL,因此移除t1的一行將同時刪除t2的一個相關行。但是如何在刪除t2時設置t3的空值? (t2可以直接刪除,並且級聯從t1的刪除中刪除)。在級聯刪除時設置爲空

這可以很容易地在MySQL中完成,但在JPA中我真的不知道該怎麼做。我找了個答案,並且@PreRemove,orphanRemoval=true能解決我的問題嗎?

感謝十億!

+0

你必須自己動手。獲取將要移除的t2的t3,並將它們的t2設置爲null。 –

+0

@JBNizet非常感謝!手動設置字段非常簡單,並且很有用!這裏的教訓是,當考慮到JPA/Hibernate是一個ORM映射器時,事情很清楚並且更容易解決。 – frogcdcn

+0

您是否嘗試過使用定義JPA 2.1 ForeignKey並設置「ON DELETE NULL」? –

回答

0

手動設置字段爲空作品,例如t2.getT3XXField().setT2XXField(null)

您還可以使用中的@PreRemove回調來執行此操作。

@PreRemove 
public void preRemove(){ 

    T3Field.setT2Field(null); 
} 

雙方都有效。此外,對於t3,不要在t2上使用Cascade.ALLREMOVE,因爲除去t2將刪除t3實體,但在這種情況下,我們不想設置t3 null。