当我锁定了其他东西时,我遇到了某个 SELECT 查询的问题。例如:
我OPTIMISTIC_FORCE_INCREMENT
在其中的一个对象上设置了锁定,Table 1
同时还有另一个事务包含对 SELECT 查询Table 2
。Table 2
但是,没有任何数据库对象(外键或其他类型的约束)将其连接到Table 1
. 但是当第二个 SELECT 查询发生时,OptimisticLockException
会抛出 。
有人知道为什么会这样吗?
当我锁定了其他东西时,我遇到了某个 SELECT 查询的问题。例如:
我OPTIMISTIC_FORCE_INCREMENT
在其中的一个对象上设置了锁定,Table 1
同时还有另一个事务包含对 SELECT 查询Table 2
。Table 2
但是,没有任何数据库对象(外键或其他类型的约束)将其连接到Table 1
. 但是当第二个 SELECT 查询发生时,OptimisticLockException
会抛出 。
有人知道为什么会这样吗?
OptimisticLockException (OLE) 不太可能仅由选择查询引发。我假设您确实在某处进行了更新。
当使用乐观锁定时,实体通常具有版本列(由@Version
注释标记)。当要同步到数据库的实体过时时,通常会发生 OLE。例如(下面的每个步骤都是 1 个单数据库事务):
通常最好的办法是捕获 OLE,然后向用户显示一条消息,内容大致如下:“嘿,有人编辑了同一个实体并先保存。你想覆盖/合并/丢弃你的更改吗?”