Hibernate刷新只读事务

时间:2014-07-30 08:55:42

标签: hibernate jpa transactions

我正在使用spring和hibernate的web应用程序。我的应用程序有多个线程同时从同一个表中获取数据。表示该表的实体类是版本化的(具有@Version注释字段)。

问题是我在检索数据时经常遇到OptimisticLock异常(StaleDataObject exceptio)。我知道这发生在:

  1. 第一个线程检索数据
  2. 线程2从同一个表中检索数据
  3. 线程1刷新数据
  4. 线程二尝试刷新数据但现在已经过时了。
  5. 我试图将事务性getter方法标记为只读,因为他们唯一要做的就是获取数据。我还设置了传播,以确保方法在单独的事务中运行。

     @Transactional(readOnly = true, propagation=Propagation.SUPPORTS)
    

    不幸的是,表中的版本仍然在每次检索时都会更新,我仍然会遇到相同的异常。

    我错过了什么吗?这些方法只应从数据库中检索数据,并且仍会导致这些异常。

    很奇怪,只有我使用的应用程序会遇到这类问题,我认为hibernate会以更好的方式处理它(?)。

0 个答案:

没有答案