我正在使用spring和hibernate的web应用程序。我的应用程序有多个线程同时从同一个表中获取数据。表示该表的实体类是版本化的(具有@Version注释字段)。
问题是我在检索数据时经常遇到OptimisticLock异常(StaleDataObject exceptio)。我知道这发生在:
我试图将事务性getter方法标记为只读,因为他们唯一要做的就是获取数据。我还设置了传播,以确保方法在单独的事务中运行。
@Transactional(readOnly = true, propagation=Propagation.SUPPORTS)
不幸的是,表中的版本仍然在每次检索时都会更新,我仍然会遇到相同的异常。
我错过了什么吗?这些方法只应从数据库中检索数据,并且仍会导致这些异常。
很奇怪,只有我使用的应用程序会遇到这类问题,我认为hibernate会以更好的方式处理它(?)。