如何引发OptimisticLockException

时间:2010-09-28 11:06:25

标签: java jpa ejb optimistic-locking

无法捕获乐观的锁定异常。

提出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
              }     
          }
       }

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

try
{
    getEntityRepository().update("Some Persistence Obj");
}
catch (EJBException e)
{
    if (e.getCause() instanceof OptimisticLockException)
    {
        // code goes here
    }
}