私は、長時間実行されるジョブを実行する一種の JobProcessor を実装しています。これらのジョブは、基本的に と の情報を使用しPage
てPageField
、PageRelation
ページのツリーを定義し、各ページには独自PageField
の があります。
tl;dr オブジェクト構造を Hibernate から簡単にコピーして、トランザクションの外部で使用する方法は?
もっと詳しく:
これらのオブジェクトを永続化するために Hibernate を使用していますが、すべて正常に動作します。現在、トランザクションを手動で制御する VM で JobProcessor を実行しています。
this.em.getTransaction().begin();
job.start();
this.em.getTransaction().commit();
ページに関する情報が必要な場合があります。次のように取得できます。
this.em.getTransaction().begin();
Page page = this.withId(pageId)
this.em.getTransaction().commit();
どういうわけか、私は LazyInitialization 例外に直面しなかったことが幸運でした。HibernateSession は決して閉じられないためだと思います。
現在、私は Spring 制御の環境に移行しており、すべてのトランザクションを短くクリーンにしようとしています。のオブジェクト ツリーPage
、つまり、長時間実行されるメソッドのすべてのフィールドとリレーションとフィールドが必要です。最善の方法は、防御的なツリーのコピーを作成することだと思います。どうすればこれを簡単に達成できますか? または、この問題に対処するためのより良い方法はありますか?