我对 JPA 很陌生,阅读了这篇关于 JPA2.0 中锁定模式的文章,这给我留下了一个关于 LockModeType.OPTIMISTIC_FORCE_INCREMENT 的问题。
这是带有文章示例的图像:http: //i.stack.imgur.com/dFjhZ.jpg
到目前为止,我明白只有当我对实体 A 的更新取决于刚刚读取的另一个实体 B 的状态时,才需要在事务 T1 中显式乐观锁定。
我也明白使用 OPTIMISTIC_FORCE_INCREMENT 的锁会导致 B 更新它的版本属性,这将导致 OptimisticLockException 在所有尝试更新 B 并在发布锁之前读取它的事务中(即使用旧版本值)。
我的问题是:如果另一个事务 T2 在 B 的版本增加后立即开始,更改 B 并在 T1 提交之前完成,会发生什么?
据我了解,T1 应该得到一个 OptimisticLockException。如果是这样,这个锁定有什么意义,因为它只是略微减少了 T1 的易受攻击时间窗口?这意味着:如果我想确保在 T1 完成之前 B 不会改变,我需要一个悲观锁,对吗?
提前感谢您向我说明这一点:)