(N)休止状態にカスケード、私はルールが必要なのでしょうか?
-
19-09-2019 - |
質問
申し訳ありません...
私は三つのクラスを持って、Parent
、Child
とOther
Parent
は、子供がChild
列を持っている多くのParent_Id
を持っている。
Other
はChild
カラムを通してChild_Id
への参照を保持している
Parent
を削除すると、、私はまた、すべての関連するChild
オブジェクトを削除したいです。これらChild
オブジェクトがどのOther
クラスによって参照されている場合、私は彼ら(Other
オブジェクト)Child_Id
参照は無効になりたい。
どのようなカスケードルール私は2つの関係上必要なのでしょうか?
また、NHibernateのはメモリにだけでなく、データベース内のエンティティを更新する?
すなわち。私はメモリにParent
、Child
とOther
の束を持っている(すなわち一時的でない、DBからロード)とParent
を削除するには、NHを伝える場合、何が起こるのだろうか?私はParent
とChild
オブジェクトが過渡になるだろうと仮定しますか?任意のChild
オブジェクトのOther
プロパティに何が起こるのだろうか?
編集:全削除 - 孤児を使用した場合、どのようなクラス孤児などのオブジェクト?親Child
が削除された場合は、上記の例では、Parent
孤児のですか?孤立したとして実体を考慮しOther
問題から参照していますか?
おかげ
解決
NHは(IDSおよびバージョンのを除く)、メモリ内のあなたのエンティティのいずれかを更新しません。 NHはあなたのエンティティの関係を管理する責任を負いません。それはちょうどあなたがデータベースにメモリに何をしたか存続ます。
このような観点から、それが理解しやすくなるはずです。
cascade="delete"
は、親が削除されたとき、子供が同様に削除されることを意味します。
cascade="delete-orphan"
手段は、そのさらに、子がなくても、親の参照であれば、それはもう削除されます。子供がセッションである場合、これは、もちろん、のみ動作します。
削除されたインスタンスは、メモリの過渡ます。 (Other
から)一時インスタンスへの参照は、例外が発生します。私の知る限り、あなたは自分で削除されたインスタンスへの参照を削除する必要があります。あなたは、おそらくいくつかのトリックによって、それは暗黙的にすることができますが、私はこれがきれいになることを疑います。これは、ビジネス・ロジックです。
親子関係について、cascade="all-delete-orphan"
が適当である。
は、通常の参照のために私はcascade="none"
を好むます。
偉大説明するあり/ P>