1

无法捕获乐观锁异常。

引发 OptimisticLockException 的一种方法是使用 em.flush()

try{
   //some enitity
   em.flush()
  }
catch(OptimisticLockException ole){}

但我不认为这是最好的解决方案,因为在这个完整的数据库中是刷新的。

另一种解决方法是捕捉EJBException并找到RollBackException那个..

       try{
            // some code
        }
       catch (EJBException ex) {

          if (ex.getCausedByException().getCause().toString().
              indexOf("javax.transaction.RollbackException")!= -1){
                   // do work
              }     
          }
       }

请帮助您有任何其他想法或告诉我哪种方式更好。

4

2 回答 2

0
try
{
    getEntityRepository().update("Some Persistence Obj");
}
catch (EJBException e)
{
    if (e.getCause() instanceof OptimisticLockException)
    {
        // code goes here
    }
}
于 2013-12-11T14:42:33.410 回答
0

如果您想捕获 OptimisticLockException 并刷新数据或重试操作,我认为第一种方法是一种合理的方法。至于第二种方式,如果当前事务不活跃,则不会抛出RollbackException。

于 2010-09-28T12:41:37.467 回答