java - LockModeType.PESSIMISTIC_WRITE 是否锁定结果行或整个表?
问题描述
搜索了一段时间后我放弃了,因为我在任何地方都找不到这个答案,所以我在这里尝试。
我正在使用 Spring Boot 和 CrudRepository 从我的 oracle 数据库中获取实体。但是,我不确定在 a 中调用的这段代码是否@Transaction
会锁定我的整个表,或者只是锁定返回的结果实体findAllByStatusAndCreatedBetween
?
@Repository
public interface MyRepository extends CrudRepository<MyEntity, Long> {
@Lock(LockModeType.PESSIMISTIC_WRITE)
List<MyEntity> findAllByStatusAndCreatedBetween(Status status, Date from, Date to);
}
解决方案
LockModeType.PESSIMISTIC_WRITE 在内部执行 select for update 语句。
SELECT FOR UPDATE 锁定行和任何关联的索引条目,就像您为这些行发出 UPDATE 语句一样。其他事务被阻止更新这些行、执行 SELECT ... LOCK IN SHARE MODE 或读取某些事务隔离级别的数据。一致读取忽略读取视图中存在的记录上设置的任何锁定。(旧版本的记录不能被锁定;它们是通过在记录的内存副本上应用撤消日志来重建的。)
请检查https://docs.oracle.com/cd/E17952_01/mysql-5.1-en/innodb-locking-reads.html
推荐阅读
- material-ui - 当 body 有 dir = 'rtl' 时,Material UI 电话号码混乱
- r - data.table 的 frollmean() 和 forecast 的 ma() 之间略有不同,顺序是偶数
- postgresql - 无法在 Mac 终端 ZSH 中打开 Postgres shell
- php - Laravel 问题,如何在 Blade 上使用 _GET
- r - 将数据表中的主题编号从低到高重新排序
- vba - 在电子邮件介绍后插入屏幕截图
- lua - 链接器找不到 lua 库
- python - 清理某个级别的json文件转换为系列
- java - 从 Java 到 Python 再返回的套接字
- arrays - 如何迭代对象 id 值?在 Vue.js 中