休止状態:子が多対一で親にリンクされている場合、親を削除するときに Hibernate が子テーブルからレコードを削除するようにするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/360026

質問

多対 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 キャッシュをフラッシュします (または非キャッシュ セッションを使用します)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top