簡體   English   中英

Hibernate:如果子節點鏈接到父節點多對一,如何在刪除父節點時從子表中刪除Hibernate記錄?

[英]Hibernate: How to make Hibernate delete records from child table when deleting parent if child is linked to parent with many-to-one?

讓我們說我有兩個表 - “孩子”和“父母”有多對一的關系。 如果父記錄被刪除,我需要刪除子條目。

如果我通過在parent.hbm中創建一對多關聯並設置cascade =“all-delete-orphan”來鏈接子表,則不會出現問題。

問題是我不希望在父方面有一對多關系,所以我在子方面創建了多對一關系。 原因是子表非常大,我不想每次使用父表時提取數百條記錄。 所以我的配置如下所示:

child.hbm:

<many-to-one name="parent" class="com.example.Parent" column="parentid"/>

而parent.hbm與child沒有關聯。

問題是: 如果子項鏈接到具有多對一的父項,如何在刪除父項時從子表中刪除Hibernate記錄?

謝謝。

幾種選擇:

  • 使用級聯刪除將一對多添加到父級,但使用延遲加載可以減輕性能損失。

  • 使用Hibernate Interceptor (或AOP環境中的一個方面)來檢測父記錄刪除和刪除子項。

我個人贊成第一個選項,因為它可以讓您的數據模型更接近地反映數據中的真實關系。

編輯:有第三個選項,但它不愉快 - 使用數據庫觸發器,並刷新您的Hibernate緩存(或使用非緩存會話)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM