Hibernate:マージは、多くのオブジェクトで作業しますか?
-
28-10-2019 - |
質問
こんにちは私はそれを知っており、マージがオブジェクトをセッションに戻す前にテストされ、オブジェクトがセッションにならなくなったときに怠zyな初期化の例外を防ぎます。
a。)だからいくつかの質問があります。
私が支払いの場合 - >顧客(多くの一方向の関係で)そして私はそうします
支払い= Payment.class.cast(session.merge(oldpayment));
また、顧客オブジェクトはセッションにreattachになりますか、それとも顧客に別のマージの呼び出しを行う必要がありますか?
b。)支払い - >顧客(多額の双方向の関係)の場合はどうなりますか。何が起こるか。
c。)3つ以上の階層の関係がある場合はどうですか。
例:Hotel->支払い - >顧客。
Hotel Hotel = Hotel.Class.Cast(SESSION.MERGE(UNMERGEHOTEL))を行うと、支払いと顧客のオブジェクトもセッションにマージされますか?
ありがとう
解決
それはあなたの関係のカスケードオプションによって定義されます。
- 関係がマージ操作をカスケードするように構成されている場合、マージされているエンティティから参照されるエンティティもマージされ、マージする前にこれらのエンティティに加えられた変更がデータベースに伝播されます。
- それ以外の場合、これらのエンティティはデータベースからリロードされます。したがって、マージ前にこれらのエンティティに加えられた変更は破棄されます。
- 無知の怠zyな関係は無視されます。
JPA仕様からの関連EXCEPRT(ネイティブHibernate'sは推測します Session
インターフェイスは同じセマンティクスを提供します):
- すべてのエンティティについてy xからの関係によって参照されるxカスケード要素値を持っている
cascade=MERGE
またcascade=ALL
, 、yはy 'として再帰的にマージされます。 xによって参照されるすべてのそのようなyについて、x 'はy'を参照するように設定されます。 (xが管理されている場合、xはx 'と同じオブジェクトであることに注意してください。)- xがx 'に統合されたエンティティである場合、別のエンティティyを参照してください。
cascade=MERGE
またcascade=ALL
指定されていない場合、x 'から同じ関連性のナビゲーションは、yと同じ永続的アイデンティティを持つ管理されたオブジェクトy'への参照を生成します。Persistence Providerは、フェッチされていない怠zyとマークされたフィールドをマージしてはなりません。マージするときにそのようなフィールドを無視する必要があります。
参照:
所属していません StackOverflow