首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA -悲观锁-当锁存在时会发生什么?

JPA -悲观锁-当锁存在时会发生什么?
EN

Stack Overflow用户
提问于 2015-02-03 17:14:06
回答 2查看 3.4K关注 0票数 4

背景信息:我有一个问题,是一个实体更新没有经过的症状。回顾我的日志,我可以看到我期望的update sql语句,但是它们几乎是同时的(间隔0.012秒),应用程序在更新实体时使用一个悲观的读锁。

这就引出了我的问题:当悲观锁存在时,预期的行为是什么?我还需要看到多个更新查询吗?我应该期望PessimisticLockException会被抛出,对吗?还有什么其他指标需要我去找吗?

Hibernate是我的JPA实现。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-03 17:22:24

Pesimistic锁实际上是使用SQL-查询传播到DB级别的(检查要比较的执行的查询)。如果存在悲观锁,应用程序应该等待DB直到锁被释放,因此它不是必须抛出的expcetion (但可能是这样)。

关于例外情况:

代码语言:javascript
复制
/*
PessimisticLockException if pessimistic locking fails and the transaction is rolled back
LockTimeoutException if pessimistic locking fails and only the statement is rolled back
*/
public <T> T find(Class<T> entityClass, Object primaryKey, LockModeType lockMode);

对于其他EntityManager方法,这两个异常是在simmilar情况下抛出的。

票数 4
EN

Stack Overflow用户

发布于 2015-02-03 18:24:44

悲观锁定防止对象同时更新。相反,对象的更新正在形成链的类型--如果锁已经存在,则更新将等待直到锁被释放。

因此,抛出异常并不是悲观锁的预期结果。预期行为是消除我前面描述的并发性。

要进一步阅读,您可以参考源代码。

在我们的例子中,您的更新似乎没有通过,因为它被一些后续更新覆盖了。

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

https://stackoverflow.com/questions/28304837

复制
相关文章

相似问题

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