2009-06-24 6 views
1

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

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

  • "イベント" テーブルには、ID = 1で識別される3つのイベント、2、3
  • が含まれている "人" の表は、ID = 4で識別される二人が含まれています
  • 5. 1-4、2-4のような関連付けを含む「person_event」テーブル、今3-5

は、その後だけでなく それをしない、私はHibernate.delete()を使用して、イベント1を削除すると仮定しますイベント1を削除し、と関連person_event1-4だけでなく、 人4!

問題はperson4が別のテーブルによって参照されており、外部制約例外をスローします... イベントと関連person_eventだけを削除するようにNHibernateを構成する方法は?

+0

"nhibernate"タグを "hibernate"に変更することをお勧めします。これはNHibernate固有の機能に関連するものではないようです。 –

+0

または "hibernate"と "nhibernate"の両方のタグを使用してください。 – yfeldblum

+0

あなたは問題を解決しましたか?はいの場合はどうですか? –

答えて

0

私は、Hibernateで経験しているではないんだけど、私はあなたがHibernate.delete()を呼び出す前に、問題のpersonオブジェクトを通して、それに関連するすべての人からあなたのイベントを削除したいと思います。

これは、オブジェクトの生涯の問題になります。これは、あなたが非常に慎重に考えるべきだと思います。たとえば、event1がperson1、person2、person4に関連付けられていて、person1を削除した場合、おそらくではなく、は自動的にevent1を削除します。

2

多対多マップでカスケード設定をnoneに設定すると、あなたが望むものを得ることができるはずです。

イベントに関連するエントリだけが削除されますが、削除エフェクトはPersonにカスケードされません。

関連する問題