当我的应用程序中发生乐观并发问题时,将在我的应用程序中引发一个StaleObjectStateException而不是OptimisticLockException(我应该读到这一点)。无需发布代码,因为这是最基本的并发问题- 时间戳列中的版本错误。
我应该如何获得OptimisticLockException,而不是另一个?
当您使用直接的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应用程序中,通常会提示用户是否覆盖/丢弃/合并他/她的对象版本