当前使用版本(必须填写清楚,否则不予处理)

3.2.0

该问题是怎么引起的?(最新版上已修复的会直接close掉)

代码生成器生成了一个ActiveRecord模式继承自Model的Page类 在开启缓存后,CachingExecutor.flushCacheIfRequired方法会调用tcm.clear,随后TransactionalCache.clearOnCommit被标记为true(应该是等在commit之后才真正清空缓存?),但是Model.insert方法不会产生对CachingExecutor.delegate的commit(),而是在close session时直接rollback了。结果是数据库中有对应的数据但缓存并没有被清除。 缓存配置如下 对应的Mapper也添加了@CacheNamespace注解

MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();
mybatisConfiguration.setGlobalConfig(globalConfig);
mybatisConfiguration.setLogImpl(StdOutImpl.class);
mybatisConfiguration.setMapUnderscoreToCamelCase(true);
mybatisConfiguration.setCacheEnabled(true);
mybatisConfiguration.setLocalCacheScope(LocalCacheScope.STATEMENT);
mybatisConfiguration.setDefaultExecutorType(ExecutorType.REUSE);

重现步骤

报错信息

Comment From: ChenYunerer

老哥怎么说,最后有解决方案没,我看Model中的insert等,直接调用DefaultSqlSession的insert方法,之后也不会调用commit,导致缓存没有刷新,其他BaseMapper和ServiceImpl用的都是SqlSession是SqlSessionTemplate没有这个问题。