mybatis多次查询得到的java对象内存地址相同的问题解决

问题

今天遇到了一个问题,在一个for循环中,使用相同的参数执行一个参数,获取的返回结果内存地址是一样的,这就导致了后面的循环处理数据时,把前面的数据也修改了。

打断点查看之后,发现后两次查询的结果,内存地址居然是相同的,搞的我一头雾水。

原因

这个service方法上,加了@Transactional注解。如果在同一个事务中,多次对同一个查询sql进行执行的话,mybatis只会查询一次数据库,而后几次的返回结果实际上是从缓存中取的。

解决

  1. 把这个查询方法上的@Transactional去掉。
  2. 在用到的mapper接口上,加上一行注解@Options(flushCache=Options.FlushCachePolicy.TRUE)
  3. 在用到的mapper接口对应的xml文件中, select语句添加  flushCache="true" <select id="pageListCount" resultType="int" flushCache="true">

参考文章

Mybatis事务下解决多次select语句查询结果一致的问题+案列(获取全局序列ID)_appleyk的博客-CSDN博客

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值