OptimisticLockException

OptimisticLockException

当我的应用程序中发生乐观并发问题时,将在我的应用程序中引发一个StaleObjectStateException而不是OptimisticLockException(我应该读到这一点)。无需发布代码,因为这是最基本的并发问题-时间戳列中的版本错误。

我应该如何获得OptimisticLockException,而不是另一个?

最佳答案

当您使用直接的休眠API时,将引发StaleObjectStateException。如果您使用了JPA样式休眠,则将引发OptimisticLockException。如果这使您感到困惑,请阅读:What's the difference between JPA and Hibernate?

使用try catch块来捕获异常:

try {
  // your hibernate operation here
} catch (OptimisticLockException e) {
  // do something (eg: inform user update is conflicting)
}


值得注意的是,由于其他事务在有机会这样做之前已更新(因此创建了较新版本的)对象,因此发生OptimisticLockException。在UI应用程序中,通常会提示用户是否覆盖/丢弃/合并他/她的对象版本

07-24 09:35