2014-01-17 56 views
2

如何檢查JPA中的實體是否可以刪除並且不會引發數據完整性異常?我想到的唯一方法是逐個檢查所有引用的實體,或嘗試在事務中刪除然後回滾,但是還有其他更簡單的方法嗎?JPA檢查實體是否可以刪除

+0

你想知道父參考實體是否刪除? – CycDemo

回答

3

如果「可刪除」你的意思是「如果在持久化上下文中存在的實體」,你已經回答了你的問題:

嘗試刪除事務,然後回滾

如果某樣東西去交易過程中錯誤的,那麼回滾

1

嗯,我用這個辦法......

public void doDelete() {   
    try { 
     deleteData();   
    } catch (RuntimeException runtimeException) { 
     if (getRootThrowable(runtimeException).getMessage().contains("violates foreign key constraint")) { 
      //can't delete entity 
     }    
    } 
} 

public static Throwable getRootThrowable(Throwable t) { 
    Throwable result = t; 

    while (result.getCause() != null) { 
     result = result.getCause(); 
    } 

    return result; 
} 

我不是那個粉絲,但是它爲我做...

+0

我不得不在過去使用類似的東西;往往是醜陋的問題導致醜陋的解決方案。 – Durandal

+1

是的,我知道這很醜陋,但它已經在我的應用程序很長一段時間..老實說,它正在做的工作,因爲有時我不僅檢查「違反外鍵約束」,我也想知道其他錯誤.. 。@MagicMan –