原因: 一个@Transactional注解的方法中,连续查询了两次sql,参数一致,两次查询过后再update
未加事务时,一切正常。加上事务后,导致两次查询结果不一致,debug后发现加入注解后,两次的sqlSessionProxy对象一致,导致一级缓存生效。
下面是未加事务时,sqlSessionProxy对象
下面是加上注解后,sqlSessionProxy对象
解决方案: 由于项目中引入了集中缓存redis,并自己对@Cacheable注解进行了自定义时间属性的扩展,故禁用mybatis的一级缓存。在mybatis的配置文件中加入
<setting name="localCacheScope" value="STATEMENT" />