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