我们将 Hibernate 3.6.0.Final 与 JPA 2 和 Spring 3.0.5 一起用于在 tomcat 7 和 MySQL 5.5 上运行的大型企业应用程序。应用程序中的大多数事务都存在不到一秒并更新 5-10 个实体,但在某些用例中,我们需要在单个事务中更新超过 10-20K 个实体,这需要几分钟,因此超过 70% 的时间此类事务因 StaleObjectStateException 而失败,因为其中一些实体已被其他事务更新。
我们通常在所有表中维护版本列,在 StaleObjectStateException 的情况下,我们通常会重试,但由于这些 long 事务无论如何都很长,所以如果我们继续重试,那么我也不太确定我们是否能够逃脱 StaleObjectStateException。
此外,许多活动在繁忙时间不断更新这些实体,因此我们不能采用悲观的方法,因为它可能会停止系统中的许多活动。
请建议如何解决如此长的交易问题,因为我们无法产生数千个独立的小交易,因为我们无法承受一些失败和一些成功交易的混乱数据。