首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在JPA上锁定实体或数据库

在JPA上锁定实体或数据库
EN

Stack Overflow用户
提问于 2015-09-30 12:20:05
回答 1查看 1.4K关注 0票数 1

JPA方法EntityManager#lock是立即对内存中的托管实体实例生效,还是将按需语义路由到DB?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-01 10:55:13

使用EntityManager#lock进行锁定只有在使用悲观锁类型时才是即时的。

使用悲观锁类型将锁指令路由到DB,并等待直到锁成功或到达超时。因此,调用是阻塞的,如果不成功,事务将回滚。

对内存中的对象的直接影响是间接的,但是立即-如果没有获得锁,事务就回滚,并且不可能成功地完成事务。在此之后修改实体对象是没有意义的,因为它们不会被持久化。但理论上,只要您捕获LockTimeoutException,就可以像对任何其他普通Java对象一样修改和处理实体对象,但我不建议这样做。

如果使用乐观锁定,则从本质上看,只有在检测到冲突后才回滚事务。这种情况只能在实体被持久化到DB (通常在事务结束时发生,但也可以在中间刷新时发生)的时候发生。乐观锁定的要点是在很明显的碰撞发生的稍后时刻解除锁定。

关于JPA锁定机制的非常好的文档可以在这个锁定在JPA中页面中找到。

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

https://stackoverflow.com/questions/32865920

复制
相关文章

相似问题

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