一个事务相同的dao层方法,修改第一次查询的结果集,第二次查询结果与第一次一致

今天同事开发过程中遇到这么一个问题

使用的Spring+ibatis,在一个service方法中(同一个事务中)

里面有一个查询方法

第一次查询出来一条结果,用list保存,命名为 fList,然后对fList进行修改,增加了2条,这时候fList.size()==3。

然后再用相同的方法相同的参数再查询结果值命名为sList, 这时候sList应该也是1条,但是实际上sList.size()==3。

把list.toString()打印出来,发现"内存地址"一样,也就是说fList和sList是一样的。

猜测是缓存问题,实际上第二次并没有查询,而是直接返回一个内存地址。

在另外一个博客也找到类似的情况,和我们猜想也基本一致。

https://blog.csdn.net/caiqianzhigai0859/article/details/79615168

 

解决的方法

ibatis好像不能关闭一级缓存,所以我们想了个比较笨的方法,在第一次查询的时候在复制一套新的list

List<String> sList = new ArrayList<String>();
for(String s : fList){
    sList.add(s);
}

千万不可以写成  List<String> sList = fList;

具体原因参考另外一个博客

https://blog.csdn.net/heheile/article/details/81096867

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值