如何使用 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
有没有一种简单的方法来强制执行 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