mybatis查询的一级缓存在插入数据以后没有清空,查询结果没有变化

gongyf0606 2018-05-01 05:36:10
mybatis+spring环境
我发起一次调用的过程中有一个查询语句会多次使用,第一次查询结果是0,然后会新增一条数据,有事务控制,未提交,正常结果是接下来的第二次、第三次查询应该是1,但是结果还是0。我跟踪看了日志,后面的查询根本就没有执行sql语句,而是直接从缓存获取了第一次的结果。为什么没有清空缓存呢?
因为这个问题是新功能改造引起的,所以我排查代码发现,有一段代码会另起一个事物,因为使用了静态类,所有使用了SpringContextHolder.getBean("")的方式获取bean,我把方法改成非静态的以后,用注入的方式获取bean,问题就没有出现了。请问该如何解释该问题。
代码如下:

Integer count = offerQueryInstSMO.queryProdOfferInstIsExist(prodOfferInstId);
if(count == 0 ){
offerOperInstSMO.saveProdOfferInst(prodOfferInst);
}
XXX
Integer count = offerQueryInstSMO.queryProdOfferInstIsExist(prodOfferInstId);

日志如下:

...全文
1265 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
springdy 2018-05-02
  • 打赏
  • 举报
回复
可能没改之前,前后两次代码属于不同事务,使用了mybatis的二级缓存,二级缓存只有在事务提交后在被清空; 改动之后属于同一个事务,使用了一次缓存,一级缓存在更新前就会被清空,因此在查的时候,就直接读取数据库了

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧