1

これがだまされている場合は申し訳ありませんが、それを見つけることができませんでしたが、とにかく何を検索するのか本当にわかりませんでした...

私には3つのクラスがParentありChildます。Other

ParentChild子供がParent_Id列を持っているところがたくさんあります

OtherChildを介してへの参照を保持しますChild_Id

を削除するときにParent、関連するすべてのオブジェクトも削除したいと思いChildます。これらのChildオブジェクトがいずれかのOtherクラスによって参照されている場合、それらの(Otherオブジェクト)Child_Id参照を無効にします。

2つの関係にどのカスケードルールが必要ですか?

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

つまり、メモリ内に(つまり、一時的ではなく、dbからロードされた)たくさんあり、ParentNHに削除するように指示した場合、どうなりますか?とオブジェクトは一時的になると思いますか?オブジェクトのプロパティはどうなりますか?ChildOtherParentParentChildChildOther

編集:All-Delete-Orphanを使用する場合、オブジェクトを孤立として分類するものは何ですか?上記の例では、ChildParentが削除された場合、孤立していますか?Otherエンティティを孤立していると見なす場合、からの参照は重要ですか?

ありがとう

4

1 に答える 1

1

NHは、メモリ内のエンティティを更新しません(IDとバージョンを除く)。NHは、お客様のエンティティの関係を管理する責任を負いません。これは、メモリ内で行ったことをデータベースに保持するだけです。

この観点から、理解しやすくなるはずです。

cascade="delete"これは、親が削除されると、子も削除されることを意味します。 cascade="delete-orphan"つまり、さらに、親が子を参照しなくなった場合でも、子は削除されます。もちろん、これは子供がセッションに参加している場合にのみ機能します。

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

親子関係には、cascade="all-delete-orphan"が適切です。

定期的な参照のために私は好むcascade="none"

AyendeRahienによる素晴らしい説明があります

于 2009-08-24T11:54:56.410 に答える