2010-12-16 6 views
7

HibernateSessionのメソッドsaveOrUpdate(Object)merge(Object)の違いは何ですか?指定されたオブジェクトが対応するテーブルに存在しない場合はSQL​​ステートメントが生成され、存在する場合はUPDATEが生成されるようです。これはNHibernateはのためであり、それはまた、Hibernateに適用されていてもHibernateセッションメソッドsaveOrUpdate()とmerge()の違いは何ですか?

+1

リンク先のjavaドキュメントを実際に読んだことはありますか? :) – willcodejavaforfood

+0

はい、私はしました。主な相違点は、 'merge()'は 'saveOrUpdate()'がセッション中でないオブジェクトをロードすることです。これは、 'merge()'がnull以外の値に設定されたフィールドだけを上書きする間に、部分オブジェクトの 'saveOrUpdate()'がすべてのフィールドを上書きすることを意味しますか?あるいは両方とも同じ結果を生み出しますか? –

+0

[NHibernate - session.Mergeとsession.SaveOrUpdateの違いの可能な複製](http://stackoverflow.com/questions/170962/nhibernate-difference-between-session-merge-and-session-saveorupdate) –

答えて

1
+0

によると3番目のコメント、NHibernate 'Merge()'と 'SaveOrUpdate()'はまったく同じ結果を生成します。 –

+1

これが真であれば、それはHibernateでは同じではない:-)両方の呼び出しは*同じ*結果をもたらすかもしれないが依存しているかもしれない(コメント欄には 'SaveOrUpdate()'が単に 'Merge()エンティティの状態についてドキュメントを複製する代わりに、更新されたリンクだけを提供します:-) http://docs.jboss.org/hibernate/core/3.5/reference/en/html/objectstate.html#objectstate-saveorupdate – jpkrohling

1

私の記憶が正しければ、マージは、現在管理されていないこと、非関連したインスタンスのためです。 idに基づいてルックアップを行い、2つをマージします。

+0

「2つの」オブジェクトをマージすることを意味しますか?マージするフィールドはどのように分かりますか?違いのないもの、または異なるもので非ヌルのものだけをマージしますか?最初のケースは更新と変わらず、2番目のケースはセーブと更新の両方とは異なります。 –

+0

仕様を引用するリンクされた質問の2番目の答えを見てください。 3.2.4.1 - http://stackoverflow.com/questions/3870844/best-approach-for-updation-using-jpaフィールドが遅延とマークされていないか、クラスがサポートしていない限り、デタッチされたインスタンスがほとんどのデータを上書きするようですバージョン。 – Scott