无论如何,我通常为自己调试我的东西,我也有一个替代(臃肿但有效)的解决方案,但我似乎无法在我的以下批处理代码中找出逻辑错误:
private int records = 0;
private Query q;
public void BatchProcessor(String className)
throws Exception {
int pageSize = 1000;
boolean done = false;
List<Test> resultList = null;
while (!done) {
q.setFirstResult(records);
q.setMaxResults(records+pageSize);
System.out.println("records: "+records);
if (records % pageSize == 0) {
em.clear();
}
resultList = q.getResultList();
process(resultList);
}
}
private void process(List<Test> list) {
Iterator<Test> itAmount = list.iterator();
while (itAmount.hasNext()) {
Test dto = itAmount.next();
records=records+1;
}
}
输出如下:
记录:0
记录:1000
记录:3000
记录:7000
记录:15000
记录:31000
...
这真让我抓狂。while() 中的每个循环似乎再次从“0”开始,因为 q.setFirstResult() 的数量然后列表变大。该列表每次迭代都会变大,直到发生“内存不足”异常。我也不明白为什么它没有打印出 20000 条记录、40000 条、50000 条等。我完全看不出这段代码中的错误 :( 请问有人有提示吗?