一尘不染

StaleObjectStateException与OptimisticLockException

hibernate

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

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


阅读 334

收藏
2020-06-20

共1个答案

一尘不染

当您使用直接的hibernateAPI时,将引发StaleObjectStateException。如果您使用了JPA样式hibernate,则将引发OptimisticLockException。

使用try catch块来捕获异常:

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

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

2020-06-20