【问题标题】:What's the scope of a lock in Spring Data JPA/Hibernate?Spring Data JPA/Hibernate 中的锁的范围是什么?
【发布时间】:2018-09-13 16:18:03
【问题描述】:

在使用 Spring Data 的JpaRepository 时,如果findOneById(...) 方法用@Lock(LockModeType.PESSIMISTIC_WRITE)(或任何其他)注解,那么锁的作用域是什么,即。 e.它活跃了多长时间?仅在选择查询执行期间,还是直到事务结束?

P.S.:如果调用方法被@Transactional注解了怎么办?

【问题讨论】:

    标签: database hibernate spring-data-jpa spring-data locking


    【解决方案1】:

    来自 JPA 2.1 规范(重点是我的):

    悲观锁保证一旦事务在实体实例上获得悲观锁:

    • 任何其他事务(无论是使用 Java Persistence API 的应用程序的事务还是使用底层资源的任何其他事务)都不能成功修改或删除该实例直到持有锁的事务结束

    由于这是 Spring Data JPA 使用的机制,因此锁会一直保持到事务结束。

    【讨论】:

    • 这是有道理的。我想我被 JavaDoc for @Lock 弄糊涂了,它刚刚谈到了“查询”。
    猜你喜欢
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 2019-07-20
    • 2016-06-26
    • 2016-10-15
    相关资源
    最近更新 更多