当我的应用程序中发生乐观并发问题时,将在我的应用程序中引发一个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应用程序中,通常会提示用户是否覆盖/丢弃/合并他/她的对象版本