在寻找了一段时间后,我放弃了,因为我在任何地方都找不到这个答案,所以我在这里尝试。
我使用Spring Boot和CrudRepository从我的oracle数据库中获取实体。但是,我不确定这段在@Transaction内调用的代码是否会锁定我的整个表,或者只是锁定findAllByStatusAndCreatedBetween返回的结果实体
@Repository
public interface MyRepository extends CrudRepository<MyEntity, Long> {
@Lock(LockModeType.PESSIMISTIC_WRITE)
List<MyEntity> findAllByStatusAndCreatedBetween(Status status, Date from, Date to);
}发布于 2020-03-10 21:58:46
LockModeType.PESSIMISTIC_WRITE在内部执行select for update语句。
SELECT FOR UPDATE锁定行和任何关联的索引项,就像为这些行发出UPDATE语句一样。其他事务被阻止更新这些行,无法执行SELECT ...LOCK IN SHARE模式,或在某些事务隔离级别下读取数据。一致读取将忽略在read视图中存在的记录上设置的任何锁定。(旧版本的记录不能被锁定;它们是通过在记录的内存副本上应用撤消日志来重建的。)
请查看https://docs.oracle.com/cd/E17952_01/mysql-5.1-en/innodb-locking-reads.html
https://stackoverflow.com/questions/60618908
复制相似问题