0

私は、長時間実行されるジョブを実行する一種の JobProcessor を実装しています。これらのジョブは、基本的に と の情報を使用しPagePageFieldPageRelationページのツリーを定義し、各ページには独自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、つまり、長時間実行されるメソッドのすべてのフィールドとリレーションとフィールドが必要です。最善の方法は、防御的なツリーのコピーを作成することだと思います。どうすればこれを簡単に達成できますか? または、この問題に対処するためのより良い方法はありますか?

4

1 に答える 1