gpt4 book ai didi

JPA 和乐观锁定模式

转载 作者:行者123 更新时间:2023-12-03 12:02:35 24 4
gpt4 key购买 nike

我在Oracle的博客上看了一篇文章here关于 JPA 和锁定模式。

我不完全理解 OPTIMISTIC 之间的区别和 OPTIMISTIC_FORCE_INCREMENT锁定模式类型。

OPTIMISTIC模式:

enter image description here

当用户使用此模式锁定实体时,会在事务开始时对实体版本字段 (@version) 进行检查,并在事务结束时对版本字段进行检查。如果版本不同,事务将回滚。

OPTIMISTIC_FORCE_INCREMENT模式:

enter image description here

当用户选择这种模式时,他必须flush() EntityManager 的状态到数据库中以手动增加版本字段。因此,所有其他乐观事务都将失效(回滚)。在事务结束时也会检查版本以提交或回滚事务。

看起来很清楚,但我应该什么时候使用 OPTIMISTICOPTIMISTIC_FORCE_INCREMENT模式?我看到的唯一标准是申请 OPTIMISTIC_FORCE_INCREMENT当我希望事务优先于其他事务时的模式,因为选择此模式将回滚所有其他正在运行的事务(如果我理解机制)。

除了OPTIMISTIC,还有其他理由选择这种模式吗?模式?

谢谢

最佳答案

通常,您永远不会将 lock() API 用于乐观锁定。 JPA 将在任何更新或删除时自动检查任何版本列。

lock() API 用于乐观锁定的唯一目的是当您的更新依赖于另一个未更改/更新的对象时。这允许您的事务在其他对象更改时仍然失败。

何时执行此操作取决于应用程序和用例。 OPTIMISTIC 将确保其他对象在您提交时尚未更新。 OPTIMISTIC_FORCE_INCREMENT 将确保另一个对象尚未更新,并将在提交时增加其版本。

乐观锁定总是在提交时验证,并且在提交之前不能保证成功。您可以使用 flush() 提前强制数据库锁定,或触发更早的错误。

关于JPA 和乐观锁定模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581603/

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