【问题标题】:How to enforce write lock on table row using JPA/Spring/Hibernate如何使用 JPA/Spring/Hibernate 对表行强制执行写锁定
【发布时间】:2021-07-10 10:43:20
【问题描述】:

有没有一种简单的方法来强制连接 Isolation.REPEATABLE_READ 并为 select 语句写入锁定,所以一旦我读取了事务 T1 中的一行,所有其他尝试读取同一行的事务将挂起,直到 T1 是提交/回滚?

【问题讨论】:

    标签: java spring hibernate locking isolation-level


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在您的服务方法或您希望此注解的任何位置使用您想要的具有可重复读取的隔离级别的事务

      @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

      【讨论】:

      • @user1079475 检查更新的锁定答案也显示
      猜你喜欢
      • 2019-02-03
      • 2019-03-10
      • 1970-01-01
      • 2018-08-01
      • 2015-11-25
      • 1970-01-01
      • 2018-01-10
      • 2018-03-06
      • 2019-10-14
      相关资源
      最近更新 更多