これが私のコードです:
HibernateUtil.pushFlushMode(FlushMode.MANUAL);
getCurrSess().beginTransaction();
try {
for(i=0; i<list.size(); i++) {
Obj dummy = list.get(i);
// Here Multiple things can happen like selects, save, update and deletes of different objects which are related to dummy object....
if (i > 0 && (i % 10 == 0)) {
getCurrSess().getTran().commit();
getCurrSess().beginTransaction();
if (i % BATCH_SIZE == 0) {
getCurrSess().flush();
Thread.sleep(20);
}
}
}
} catch(Exception e) {
getCurrSess().getTran().rollback();
} finally {
HibernateUtil.popFlushMode();
}
フラッシュは、コミットされた 10 個のトランザクション (i=100) ごとに発生します。これは、多くの処理を必要とするバックグラウンド ジョブの一部です。オブジェクトの数は約 20,000 であり、遅延初期化例外が発生するため、プロセス全体が終了するまでセッションをクリアできません。私のコードは正常に動作しますが、ここでは手動モードでのフラッシュとコミットのシーケンスに悩まされています。これをより良い方法で行うことはできますか?