質問

こんにちは私はそれを知っており、マージがオブジェクトをセッションに戻す前にテストされ、オブジェクトがセッションにならなくなったときに怠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とマークされたフィールドをマージしてはなりません。マージするときにそのようなフィールドを無視する必要があります。

参照:

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top