4

我想通過其中一個外鍵級聯刪除連接表中的行,並且它有與之相關的另一個表,我想刪除與此ID關聯的所有行。所以它看起來像下圖。當我在休眠時使用Session.delete(reqCandObject)時,它可以正常工作,並通過從candidate_jobReq表中刪除One條目以及相關的註釋級聯。但是,我想刪除所有候選人的候選人ID有候選人ID(也刪除評論)我嘗試了下面的功能,但不同於漂亮的hibernate.delete(對象)函數,這一個運行到一個外鍵約束錯誤。我如何刪除這些行,同時讓我休眠級聯刪除?在Hibernate中刪除哪裏級聯刪除?

enter image description here

public void deleteWhere(String selectionCase){ 
    Session hibernateSession = this.getSession(); 
    try { 
     hibernateSession.beginTransaction(); 
     Query q = hibernateSession.createQuery("delete "+ type.getSimpleName() +" where " + selectionCase); 
     q.executeUpdate(); 
     hibernateSession.getTransaction().commit(); 
    } finally { 
     hibernateSession.close(); 
    } 
} 

回答

4

休眠處理級聯內部。執行delete查詢不會觸發內部級聯,這將導致不一致/孤兒。這可能是您嘗試過並面臨外鍵約束錯誤。

有兩種方式與他們的孩子沿着實體刪除實體的名單:

  1. 選擇使用selectionCase實體的名單。遍歷列表並單獨使用session.delete刪除每個列表。
  2. 手動刪除記錄。單獨寫入delete報表。爲避免違反外鍵約束,您需要在刪除父母之前刪除子記錄。這將比第一個選項表現更好。
+0

我一直希望有一個很好的方式來快速處理這種情況,我猜不是: - /哦。謝謝(你的)信息! –

+0

@AdamJames歡迎您。 –

+0

他們真的應該改善這種行爲! – Mitchapp