如何使用 JPA/Spring/Hibernate 在 table 行上强制执行写锁定

How to enforce write lock on table row using JPA/Spring/Hibernate

有没有一种简单的方法来强制执行 Isolation.REPEATABLE_READ 的某种程度的连接并为 select 语句写锁定,所以一旦我读取了事务 T1 中的一行,所有其他试图读取的事务同一行将挂起,直到 T1 为 commited/rolledback?

听起来您需要 pessimistic locking 使用 PESIMISTIC_WRITE 策略

在您的服务方法或任何您希望此注释打开事务的地方使用您想要的 Repeatable_Read 隔离级别

@Transactional(isolation = Isolation.REPEATABLE_READ)

记得从 org.springframework.transaction.annotation;

导入注释

而不是来自 javax.*

如果您还想锁定并发读取,请转到将实体带给您的 JPA 方法,如果您使用默认值之一,则在您的存储库中再次定义它,并使用以下注释

@Lock(LockModeType.PESSIMISTIC_WRITE)
List<MyEntity> findByName(String name);

@Lock 必须在事务内部调用,否则会抛出异常。所以之前的@Transactional是必须的

点击这里了解更多信息Lock Modes in JPA