1

2 つのクラス間の多対多の関係を定義しました。イベントと人物 (別のデータベース テーブル person_event で定義)。ここで、人を削除したいとします。そのため、イベントに関連するすべての関連付けも person_event テーブルから削除する必要があります。つまり、カスケード ON DELETE が必要です。

シナリオを考えてみましょう:

  • "events" テーブルには、id=1、2、3 で識別される 3 つのイベントが含まれています。
  • "person" テーブルには、id=4、5 で識別される 2 人の人物が含まれています。
  • 1-4、2-4、3-5 などの関連付けを含む「person_event」テーブル

ここで、Hibernate.delete() を使用してイベント 1 を削除するとします。これにより、event1 と関連付け person_event1-4 だけでなく、person4 も削除されます。

問題は、person4 が別のテーブルによって参照され、それが外部制約例外をスローすることです...イベントと関連付け person_event だけを削除するように NHibernate を構成するにはどうすればよいですか?

4

2 に答える 2

2

多対多のマップで Cascade 設定を none に設定すると、必要なものが得られるはずです。

イベントに関連するエントリのみを削除しますが、削除効果を Person にカスケードしません。

于 2009-12-30T14:11:50.410 に答える
0

私は Hibernate の経験が豊富ではありませんが、personHibernate.delete() を呼び出す前に、問題のオブジェクトを通じて、イベントに関連付けられている人からイベントを削除したいと考えています。

これは、非常に慎重に検討する必要があるオブジェクトの有効期間の問題になります。たとえば、event1 が person1、person2、および person4 に関連付けられている場合、person1 を削除しても、event1が自動的に削除されることは望ましくありません。

于 2009-06-24T14:34:18.820 に答える