NHibernate の ISession は、2 つのオーバーロードを持つメソッド Persist() を公開します。この方法に関するドキュメントはどこにも見つかりません。http://nhibernate.info/doc/nh/en/index.htmlのNHibernateの参考資料にも言及されていません。
このメソッドは非推奨ですか、それとも廃止されますか? いつ使用することになっていますか?SaveOrUpdate() と比べてどうですか?
どんなポインタでも大歓迎です。
NHibernate の ISession は、2 つのオーバーロードを持つメソッド Persist() を公開します。この方法に関するドキュメントはどこにも見つかりません。http://nhibernate.info/doc/nh/en/index.htmlのNHibernateの参考資料にも言及されていません。
このメソッドは非推奨ですか、それとも廃止されますか? いつ使用することになっていますか?SaveOrUpdate() と比べてどうですか?
どんなポインタでも大歓迎です。
このスレッドhttp://opensource.atlassian.com/projects/hibernate/browse/HHH-1273の最後のコメントは、それを非常によく示しています。
persist() は明確に定義されています。一時的なインスタンスを永続化します。ただし、識別子の値が永続インスタンスにすぐに割り当てられるとは限りません。割り当てはフラッシュ時に発生する可能性があります。仕様にはそれが記載されていません。これは、persist() で私が抱えている問題です。
persist() は、トランザクション境界の外で呼び出された場合、INSERT ステートメントを実行しないことも保証します。これは、拡張されたセッション/永続コンテキストを使用した長時間の会話で役立ちます。
persist() のようなメソッドが必要です。
save() は同じことを保証しません。識別子を返します。識別子を取得するために INSERT を実行する必要がある場合 (たとえば、「シーケンス」ではなく「アイデンティティ」ジェネレータ)、この INSERT はすぐに実行されます。またはトランザクション外。これは、拡張されたセッション/永続コンテキストを使用した長時間の会話には適していません。
また、他のソースから収集できるものから、cascade="persist" を持つエンティティは、フラッシュではなく、呼び出し時にカスケードするようです。それも非常に役立つかもしれません。