无法捕获乐观锁异常。
引发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
}
}
}
请帮助您有其他想法或告诉我哪种方法更好。
最佳答案
我认为如果您想捕获OptimisticLockException并刷新数据或重试操作,则第一种方法是一种合理的方法。至于第二种方法,如果当前事务未处于活动状态,则不会抛出RollbackException。