首页 > 解决方案 > Spring Data JPA/Hibernate 中锁的范围是什么?

问题描述

使用 Spring Data 时JpaRepository,如果findOneById(...)方法用@Lock(LockModeType.PESSIMISTIC_WRITE)(或任何其他)注释,锁的范围是什么,即它活动多长时间?只有在选择查询执行时,还是直到事务结束?

PS:如果调用方法被注释了@Transactional怎么办?

标签: databasehibernatespring-data-jpaspring-datalocking

解决方案


从 JPA 2.1 规范(强调我的):

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

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

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


推荐阅读