(N)休止状態にカスケード、私はルールが必要なのでしょうか?

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

  •  19-09-2019
  •  | 
  •  

質問

これはだまされやすい人であれば、それを見つける本当にとにかく、検索するために何を知らなかったことができませんでした

申し訳ありません...

私は三つのクラスを持って、ParentChildOther

Parentは、子供がChild列を持っている多くのParent_Idを持っている。

OtherChildカラムを通してChild_Idへの参照を保持している

私はParentを削除すると、

、私はまた、すべての関連するChildオブジェクトを削除したいです。これらChildオブジェクトがどのOtherクラスによって参照されている場合、私は彼ら(Otherオブジェクト)Child_Id参照は無効になりたい。

どのようなカスケードルール私は2つの関係上必要なのでしょうか?

また、NHibernateのはメモリにだけでなく、データベース内のエンティティを更新する?

すなわち。私はメモリにParentChildOtherの束を持っている(すなわち一時的でない、DBからロード)とParentを削除するには、NHを伝える場合、何が起こるのだろうか?私はParentChildオブジェクトが過渡になるだろうと仮定しますか?任意のChildオブジェクトのOtherプロパティに何が起こるのだろうか?

編集:全削除 - 孤児を使用した場合、どのようなクラス孤児などのオブジェクト?親Childが削除された場合は、上記の例では、Parent孤児のですか?孤立したとして実体を考慮しOther問題から参照していますか?

おかげ

役に立ちましたか?

解決

NHは(IDSおよびバージョンのを除く)、メモリ内のあなたのエンティティのいずれかを更新しません。 NHはあなたのエンティティの関係を管理する責任を負いません。それはちょうどあなたがデータベースにメモリに何をしたか存続ます。

このような観点から、それが理解しやすくなるはずです。

cascade="delete"は、親が削除されたとき、子供が同様に削除されることを意味します。 cascade="delete-orphan"手段は、そのさらに、子がなくても、親の参照であれば、それはもう削除されます。子供がセッションである場合、これは、もちろん、のみ動作します。

削除されたインスタンスは、メモリの過渡ます。 (Otherから)一時インスタンスへの参照は、例外が発生します。私の知る限り、あなたは自分で削除されたインスタンスへの参照を削除する必要があります。あなたは、おそらくいくつかのトリックによって、それは暗黙的にすることができますが、私はこれがきれいになることを疑います。これは、ビジネス・ロジックです。

親子関係について、cascade="all-delete-orphan"が適当である。

は、通常の参照のために私はcascade="none"を好むます。

偉大説明するあり/ P>

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