gpt4 book ai didi

java - JPA 2.0 的语义 OPTIMISTIC_FORCE_INCREMENT

转载 作者:搜寻专家 更新时间:2023-11-01 03:25:22 25 4
gpt4 key购买 nike

我对 JPA 很陌生,阅读 this关于 JPA2.0 中锁定模式的文章,它给我留下了一个关于 LockModeType.OPTIMISTIC_FORCE_INCREMENT 的问题。

这是文章中的示例图片:http://i.stack.imgur.com/dFjhZ.jpg

到目前为止,我明白只有当我对实体 A 的更新取决于刚刚读取的另一个实体 B 的状态时,事务 T1 中的显式乐观锁定才是必要的。

我还了解到,使用 OPTIMISTIC_FORCE_INCREMENT 的锁会导致 B 更新其版本属性,这将导致在所有尝试更新 B 并在锁发出前读取它(即使用旧版本值)的事务中出现 OptimisticLockException。

我的问题是:如果另一个事务 T2 在 B 的版本递增后立即开始,更改 B 并在 T1 提交之前完成,会发生什么情况?

据我所知,T1 应该得到一个 OptimisticLockException。如果是这样,这个锁有什么意义,因为它只是稍微减少了 T1 的易受攻击时间窗口?这意味着:如果我想确保 B 在 T1 完成之前不被更改,我需要一个悲观锁,对吗?

预先感谢您向我说明这一点:)

最佳答案

您的示例问题强调了为什么将其称为“OPTIMISTIC”锁定。它并不完美,但如果足以应对现实世界中的大量情况,并且它使用的资源(包括时间)比硬锁少得多。

当使用这种类型的锁定时,您是在换取性能,并且通常会提高可用性,打赌您的交易在大多数时间都能正常工作,并且您确信在那些情况下它不会如果不工作,您将收到通知(将抛出异常),然后您可以退后一步并“做正确的事”:重试、放弃……无论您选择如何处理异常。

悲观锁可能非常不适合需要某种级别锁定的高性能事务系统,但它们发生冲突的可能性很小:xTunes 的数百万用户中有多少人(名称已更改以保护无辜者。 .) 随时“订购”(更新),有多少是从同一个帐户订购(更新)的?

关于java - JPA 2.0 的语义 OPTIMISTIC_FORCE_INCREMENT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15293275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com