2010-09-28 28 views
1

无法捕获乐观锁异常。如何提高OptimisticLockException

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

请帮助你有什么其他的想法,或者告诉我哪种方式更好。

+0

为什么你想提出一个特定的异常,听起来不像是一个应用程序应该提高?但是,如果你认为合适,你能不能在代码中抛出新的OptimisticLockException()? – 2010-09-28 11:55:29

+0

我不明白这个问题。你想达到什么目的? – 2010-09-28 15:18:17

回答

0

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

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