0

次のような休止状態のマッピングを持つクラスがあります: ...

基本的に、いくつかの StreamRef を使用して新しい (または古い) テープを伝播し、次にヒットします。

 session.saveOrUpdate(tapeInstance);

テープが古いか新しい場合。追加するストリーム参照はすべて新しいものになります (ただし、DB からテープを取得する場合は、そのストリーム参照に簡単にアクセスできるようにしたいと考えています)。

残念ながら、私が望むように「怠け者」になることはできないようです。基本的には、「テープが新しい場合、それはすべてのストリームが新しいことを意味するため、それらを更新できる場合は、常にそれらを挿入するだけです」ただし、「テープが古い場合は、更新し、古いストリーム参照を削除してから、新しいものを追加します。それらは常に新しい/一意です。基本的に、更新をカスケードするのではなく、保存をカスケードします。これは可能ですか?

cascade="merge、delete、lock、refresh、evict、replicate、delete-orphan" (基本的には、save-update がない) を設定して問題を回避し、古いストリームをすべて手動で削除してから、各ストリームを手動で追加しました。 、 一つずつ。より良い方法はありますか?

4

1 に答える 1

1

cascade="AllDeleteOrphan" とすることで、リスト経由での挿入・削除が可能です。更新を回避するには、保存されていない主キーの値を適切に指定する必要があります。NHibernate は主キーの値を使用して、それが新しいインスタンスか既存のインスタンスかを判断します。注: 「AllDeleteOrphan」カスケード オプションを使用すると、tapeInstance が削除されると、関連するすべてのストリーム参照が削除されます。

于 2012-10-08T21:54:46.633 に答える