database - Spring Data JPA/Hibernate 中锁的范围是什么?
问题描述
使用 Spring Data 时JpaRepository
,如果findOneById(...)
方法用@Lock(LockModeType.PESSIMISTIC_WRITE)
(或任何其他)注释,锁的范围是什么,即它活动多长时间?只有在选择查询执行时,还是直到事务结束?
PS:如果调用方法被注释了@Transactional
怎么办?
解决方案
从 JPA 2.1 规范(强调我的):
悲观锁保证一旦事务在实体实例上获得了悲观锁:
- 在持有锁的事务结束之前,任何其他事务(无论是使用 Java Persistence API 的应用程序的事务还是使用底层资源的任何其他事务)都不能成功修改或删除该实例。
由于这是 Spring Data JPA 使用的机制,因此锁会一直保持到事务结束。
推荐阅读
- flutter - 使用以下项目实现 Listview 的最佳方法
- javascript - 使用java验证银行帐号
- java - Apache HttpClient:无法关闭连接
- python - 算法交易/指标/理解常数中的问题
- vue.js - v-for 对象中有重复键
- javascript - 使用 NodeJS TLS 套接字的 HTTPS 通信
- java - 使用 Tika 提取 XMPMetadata
- gmail-api - 使用 gmail api 将消息导入存档用户
- c++ - 芬威克树(BIT)。在 O(logN) 中找到具有给定累积频率的最小索引
- python - PIL 仿射变换中的参数是什么意思?