You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot JPA @Transactional隔离级别属性不生效问题排查

问题:READ_COMMITTED/READ_UNCOMMITTED隔离级别下重复查询未读取外部事务更新数据

使用READ_UNCOMMITTED或READ_COMMITTED隔离级别时,即使另一个事务更新了某行数据,同一事务内的多次查询仍返回相同结果。已通过pg_stat_activity日志确认每次查询都会执行,因此可以排除Hibernate一级缓存的影响。

代码示例

@Transactional(isolation = Isolation.READ_COMMITTED)
public void checkTransactional() {
    List<Subject> subjects = subjectRepository.findAllByTutorID(2l); // statement 1
    
    List<Subject> subjects1 = subjectRepository.findAllByTutorID(2l); // statement 2
}

执行前表状态

idnametutorial_id
7Mohan2
8Sohan2

应用执行步骤

  • 执行statement 1后,subjects结果为[(7, "Mohan", 2), (8, "Sohan", 2)]
  • 在执行statement 2前暂停调试,通过命令行执行更新:update subjects set name = 'Tohan' where id = 8;
    此时表状态更新为:
    idnametutorial_id
    7Mohan2
    8Tohan2
  • 恢复应用执行statement 2后,subjects1结果仍与statement 1相同:[(7, "Mohan", 2), (8, "Sohan", 2)]

当前现象完全符合REPEATABLE_READ隔离级别的表现,但数据库已设置为read_committed,使用Isolation.READ_UNCOMMITTED也会出现相同结果。预期statement 2应返回[(7, "Mohan", 2), (8, "Tohan", 2)],求问原因。


内容的提问来源于stack exchange,提问作者Arun Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 08:52:04