上了生产后数据量大增多,出现了这个问题,原来是oralce中in不支持大数据集来进行查询,只能匹配一千个
解决方案:
这里采用分批去调用,一次一千都存储到一个集合中
Listresult=new ArrayList<>(); //oracle中 in数据集超过一千会报错 使用分批调用 if(jobNos.size()<1000){ //直接处理 result.addAll(forbiddenAccountDAO.queryForbiddenAccounts(jobNos)); }else { //大于一千 int size = jobNos.size(); int num = jobNos.size() / 1000; for (int i = 0; i < num; i++) { result.addAll(forbiddenAccountDAO.queryForbiddenAccounts(jobNos.subList(i * 1000, (i + 1) * 1000))); } if (num * 1000 < size) { result.addAll(forbiddenAccountDAO.queryForbiddenAccounts(jobNos.subList(num * 1000, size))); } }



