tomcat 7 と MySQL 5.5 で実行される大規模なエンタープライズ アプリケーションに、JPA 2 と Spring 3.0.5 で Hibernate 3.6.0.Final を使用しています。アプリケーション内のトランザクションのほとんどは 1 秒未満で存続し、5 ~ 10 個のエンティティを更新しますが、ユース ケースによっては、1 回のトランザクションで 10 ~ 20,000 個を超えるエンティティを更新する必要があります。これには数分かかるため、70% 以上の時間がかかります。これらのエンティティの一部が他のトランザクションによって更新されたため、このようなトランザクションは StaleObjectStateException で失敗します。
通常、すべてのテーブルでバージョン列を維持し、StaleObjectStateException の場合は通常再試行しますが、これらの長いトランザクションはとにかく非常に長いため、再試行を続けると、StaleObjectStateException をエスケープできるかどうかもわかりません。
また、多くのアクティビティが忙しい時間帯にこれらのエンティティを更新し続けるため、システム内の多くのアクティビティが停止する可能性があるため、悲観的なアプローチをとることはできません。
いくつかの失敗したトランザクションといくつかの成功したトランザクションの場合に混乱したデータを許容できないため、何千もの独立した小さなトランザクションを生成できないため、このような長いトランザクションの問題を修正する方法を提案してください。