java—如何使用jpa/spring/hibernate对表行强制写锁

toiithl6  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(385)

有没有一种简单的方法来强制对select语句执行某种程度的隔离级联。可重复的\u读写锁定,所以一旦我读取了事务t1中的一行,所有其他试图读取该行的事务都将挂起,直到t1提交/回滚?

mfuanj7w

mfuanj7w1#

在您的服务方法上或您希望此注解打开隔离级别为所需可重复读取的事务的任何位置使用

@Transactional(isolation = Isolation.REPEATABLE_READ)

记住从导入注解 org.springframework.transaction.annotation; 而不是来自 javax.* 如果您还想锁定concurent reads,请转到将实体带到您身边的jpa方法,如果您使用其中一个默认值,请在repo中再次定义它,并使用以下注解

@Lock(LockModeType.PESSIMISTIC_WRITE)
List<MyEntity> findByName(String name);
``` `@Lock` 必须在事务内部调用,否则会引发异常。所以@transactional before是必需的
点击这里获取更多关于jpa中锁定模式的信息
0lvr5msh

0lvr5msh2#

听起来您需要使用pesimistic\u write策略进行悲观锁定

相关问题