首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LockModeType.OPTIMISTIC_FORCE_INCREMENT是在应用程序级别或数据库级别上使用的锁。

LockModeType.OPTIMISTIC_FORCE_INCREMENT是在应用程序级别或数据库级别上使用的锁。
EN

Stack Overflow用户
提问于 2017-11-03 12:18:57
回答 1查看 956关注 0票数 2

在hibernate jpa LockModeType.OPTIMISTIC_FORCE_INCREMENT的情况下,这个锁是在应用程序级别还是数据库级别采取的。

我使用以下代码片段来获取乐观锁:

代码语言:javascript
复制
setting = this.entityManager.find(Setting.class, setting.getId(), 
LockModeType.OPTIMISTIC_FORCE_INCREMENT);
setting.setUpdateTimestamp(new Date());
newSettingList.add(setting);

假设有两个jvm运行,而且都有相同的方法,并且存在冲突,这种锁定机制在这种情况下会起作用吗?

我的观察是,每当我调试和“newSettingList.add(设置)”在这一行代码,我没有看到任何变化的数据库在这一点。那么,如何在数据库级别确保锁定呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-03 15:23:01

乐观锁定是一种读取记录的策略,在将记录写回之前,使用版本号检查版本没有更改。当您将记录写回时,您将过滤版本上的更新,以确保它是原子的。

悲观锁定是指将记录锁定以供独占使用,直到完成为止。它比乐观锁定具有更好的完整性,但要求您在应用程序设计时小心,以避免死锁。

更好的解释here

这意味着,由于您使用了乐观锁定,所以不会在数据库级别干预锁。您所做的只是使用数据库来保持对象-实体的版本控制。例如:

( a)您从第一个jvm中打开一个T1事务,并使用v1版本读取一个对象。

b)您从第二个jvm中打开一个T2事务,并使用v1读取同一个对象。(该对象中没有更新)。

c)在T1事务中更新对象并设置其版本v2。你提交交易。

( d)您尝试在db中再次访问对象,但由于版本控制,您得到了一个异常。

但是,对于这两个事务,不需要从同一个jvm访问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47095652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档