このスレッドhttp://opensource.atlassian.com/projects/hibernate/browse/HHH-1273上の最後のコメントは非常によく、それを指定しています。
は(存続)が明確に定義されています。これは、 一時インスタンスを永続化します。 ただし、 の識別子値が永続インスタンス にすぐに割り当てられることを保証するものではありません。 割り当てはフラッシュ 時に発生する可能性があります。スペックはそれを言っていません。それは が私がpersist()で持っている問題です。
persist()は、 がトランザクション 境界外で呼び出された場合、INSERTステートメントを実行しないことを保証します。これは、 拡張セッション/永続コンテキスト で長時間実行される会話で役に立ちます。
persist()のようなメソッドが必要です。
(保存)同じことを保証するものではありません、それは は、識別子を返し、 INSERTが 識別子(例えば、「アイデンティティ」ジェネレータ、 ない「順序」)を取得するために実行しなければならない場合、このINSERTが起こります であるかどうかにかかわらず、すぐに に連絡してください。 長時間実行中の 会話では、これは拡張されたセッション/永続コンテキスト ではよくありません。
また、カスケード= "存続"のエンティティがコール時にカスケードすることは、他のソースから集めることができたようです。それも非常に便利かもしれません。
これは優れた発見です。ありがとうございました。私は実際にはPersist()..の代わりにSaveOrUpdate()を使うべきだと思うが、Persist()は確かに特定のシナリオで役に立つかもしれない。今、FluentNHibernateでカスケード= persistを指定する方法しか見つけられないのなら、助けてくれてありがとう! –