5

多対1の関係を持つ「子」と「親」の2つのテーブルがあるとしましょう。親レコードが削除された場合、子エントリを削除する必要があります。

parent.hbm で 1 対多の関連付けを作成し、cascade="all-delete-orphan" を設定して、親から子テーブルをリンクしても問題ありません。

問題は、親側で 1 対多の関係を望んでいないため、子側で多対 1 を作成したことです。その理由は、子テーブルがかなり大きく、親を使用するたびに何百ものレコードを抽出したくないからです。したがって、私の構成は次のようになります。

child.hbm:

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

一方、parent.hbm には子との関連付けはありません。

問題は次のとおりです。子が多対1で親にリンクされている場合、親を削除するときにHibernateに子テーブルからレコードを削除させる方法は?

ありがとう。

4

1 に答える 1

5

オプションのカップル:

  • カスケード削除を使用して1対多を親に追加しますが、遅延読み込みを使用してパフォーマンスの低下を軽減します。

  • Hibernate Interceptor (またはAOP環境のアスペクト)を使用して、親レコードの削除を検出し、子を削除します。

個人的には、最初のオプションをお勧めします。これにより、データモデルがデータ内の実際の関係をより厳密に反映できるようになります。

編集: 3番目のオプションがありますが、それは快適ではありません-データベーストリガーを使用し、Hibernateキャッシュをフラッシュします(または非キャッシュセッションを使用します)。

于 2008-12-11T20:09:34.927 に答える