今天同事开发过程中遇到这么一个问题
使用的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;
具体原因参考另外一个博客