1.私はレイジーアソシエーションを持つ複雑なエンティティを持っています。 @Viewscoped Bean内のプロパティにロードします(デタッチされます)。休止状態でのマージ後のフラッシュの防止
2.iエンティティの一部のフィールドを変更します(まだデタッチされています)。私は怠け者を読み込むことができるようにエンティティをマージする必要が
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public MyEntity loadTheLazyObjects(MyEntity myEntity){
//at the beginning myEntity is detached
myEntity = entityManager.merge(myEntity) //it is managed now
myEntity.getSomeLazyCollection.size(); //initialize lazy collection
entityManager.clear(); //myEntity is detached again
return myEntity;
}
:私は私のエンティティから怠惰なオブジェクトが必要なので、のように私はコンテキストを永続性と怠惰なオブジェクトを初期化するエンティティをマージ
3.Now (私はアクティブな休止状態のセッションが必要ですが)私は自分のエンティティの変更をデータベースに保存したくありません。それはなぜトランザクションの終わりの前に私は永続コンテキストからそれを切り離すのですか?助けてくれる?
トランザクションが終了したときにmyEntityにSQL UPDATEが必要なのではなく、hibernateがマージ後に更新するオブジェクトを準備すると思いますので、トランザクションの終了前にオブジェクトを切り離すとhibernateが更新を起動できなくなりますか?マージ中にフラッシュを呼び出すことはできますか?
オブジェクトはこのように遅延ロードされているため、オブジェクトを取得するために別のクエリを作成することもできます。 mergeを使ってエンティティを更新しない方法がわかりません。 –
マージの目的は、マージすることです。何らかの組み合わせのオブジェクトが必要な場合。責任オブジェクトをデータベースからロードし、自分でマージします。 f.e. ModelMapper –
を 'merge()'の代わりに使うと、対応するエンティティを 'em.find()'することができます( 'em.clear()'まで管理されます)。 –