休止状態:子が多対一で親にリンクされている場合、親を削除するときに Hibernate が子テーブルからレコードを削除するようにするにはどうすればよいですか?
質問
多対 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 には child との関連付けがありません。
質問は: 子が多対一で親にリンクされている場合、親を削除するときに Hibernate が子テーブルからレコードを削除するようにするにはどうすればよいですか?
ありがとう。
解決
いくつかのオプション:
カスケード削除を使用して 1 対多を親に追加しますが、遅延読み込みを使用してパフォーマンスの低下を軽減します。
使う ハイバネート インターセプター (または AOP 環境の側面)親レコードの削除を検出し、子を削除します。
個人的には、データモデルがデータ内の実際の関係をより厳密に反映できるため、最初のオプションを好みます。
編集: 3 番目のオプションもありますが、これは快適ではありません。データベース トリガーを使用し、Hibernate キャッシュをフラッシュします (または非キャッシュ セッションを使用します)。
所属していません StackOverflow