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

标签 java hibernate jpa locking

背景信息: 我遇到的问题是实体更新未通过的症状。查看我的日志,我可以看到我预期的更新 sql 语句,但它们几乎是同时发生的(相隔 0.012 秒)并且应用程序在更新实体时使用了悲观读锁。

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

Hibernate 是我的 JPA 实现。

最佳答案

悲观锁实际上使用 SQL 查询传播到数据库级别(检查已执行的查询以进行比较)。 如果存在悲观锁,应用程序应等待数据库直到锁被释放,因此抛出异常不是强制性的(但它可能是)。

现在关于异常(exception)情况:

/*
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 方法,这两个异常会在类似情况下抛出。

关于java - JPA - 悲观锁 - 当锁存在时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28304837/

相关文章:

java - 使用 Hibernate 从数据库检索列表时出现 ClassCastException

java - @Converter(autoApply = true) 不工作

java - 使用 querydsl-jpa 从另一端查询单向 @ManyToOne 关联

java - 一起使用 JDBC 和 Hibernate 4 进行 Spring 事务管理

java - 一个程序执行中的多个时间戳

java - Netty 服务器挂起不接受任何连接

Java程序计算

java - 为 Windows 7 创建 float 小部件

java - 如何根据特定顺序对 hibernate 结果进行排序

java - 虽然有 Composite Primary Key,但 Hibernate 在只有一个键唯一时报错