私は春に私のサービスメソッドの周りにトランザクションをラップするために設定したtxアドバイスがあります。だから私のバッチクラスでは、私はオブジェクトのリストをロードし、私のバッチクラスに返すサービスメソッドを呼び出します。私のバッチクラスでは、これらのオブジェクトのそれぞれを処理するサービスメソッドを呼び出します。しかし、オブジェクトのリストに異なる休止状態のセッションがロードされているため、そのサービスメソッドがオブジェクトの遅延ロードされたプロパティにアクセスしようとすると、遅延ロード例外が発生します。Spring/Hibernateを使用してバッチジョブの新しいセッション/トランザクションをいつ開始するか、そしてセッションをコミット/フラッシュするときのベストプラクティス?
バッチクラスは、これらのオブジェクトのすべてのID(long値)をロードするサービスを呼び出すだけです。このIDをロードするサービスメソッドに渡しますそのオブジェクトをIDのDBから取り出し、その処理を行います。
これについての考えは?
私が持っていたもう一つの質問は、これらのオブジェクトのそれぞれが互いに独立しているかどうかです。一度に1つのオブジェクトを1つずつ保持しないでください。 theres 5000が記録するなら、それはHibernateセッションのメモリ内のすべてのことをやっているので、save/update/insertを呼び出すときにアプリケーションがかなり遅くなるようです。しかし、代わりに、各レコード(一度に1つのIDを処理する)を保存/更新/挿入して、次のレコードに行く前にそのオブジェクトで完了したときにコミットすると、速度が大幅に向上するようです。また、私はそれを一括して、一言で言えば、一度に200件、あるいは5000件を一括して挿入/更新できずにエラーが発生した場合、何も保存されず、すべてがロールバックされます。
このようなことを処理するためのベストプラクティスは何ですか?本当に何かのように見えます。ありがとうございます