![](/img/trans.png)
[英]ConcurrentModificationException on Iterator.next()
[英]iterator.next() returns alternate objects
我正在嘗試對Java中的多個記錄在迭代器內執行update
HQL
查詢。 但是當我執行時,它通過跳過下一條記錄僅更新備用記錄。 如果我只在日志中打印迭代器對象,而不執行更新查詢,它將打印所有對象。 那么,當我在Iterator中執行update
時,為什么接下來要跳過對象呢?
我的代碼:
List<Integer> id = (List<Integer>) myList.list();//I've to update query for each id
for(Iterator < Integer > iter = id.iterator();iter.hasNext();){
System.out.println("id: "+(Integer) iter.next());
int ids = (Integer) iter.next();
Query query =session.createQuery("update MyTable set url =? where id=?);
query.setParameter(0,url);
query.setParameter(1,ids);
query.executeUpdate();
}
如果我在myList
有4個元素,它將通過skippint 1st和3rd進行第二和第四更新。
如果您需要在同一循環迭代中多次訪問同一迭代器元素,則不應多次調用iter.next()
,因為每次調用都會使迭代器前進。 而是一次調用iter.next()
並將結果存儲在變量中:
for(Iterator<Integer> iter = id.iterator(); iter.hasNext();) {
Integer currentID = iter.next();
System.out.println("id: "+ currentID);
Query query = session.createQuery("update MyTable set url =? where id=?);
query.setParameter(0,url);
query.setParameter(1,currentID);
query.executeUpdate();
}
請用
List<Integer> ids = (List<Integer>) myList.list();
for (Integer id : ids) {
Query query =session.createQuery("update MyTable set url =? where id=?);
query.setParameter(0, url);
query.setParameter(1, id);
query.executeUpdate();
}
在使用Iterator
時,最好使用while-loop
。
你應該試試:
List<Integer> ids = (List<Integer>) myList.list();
Iterator<Integer> iterator = ids.iterator();
while (iterator.hasNext()){
Integer id = iterator.next();
System.out.println("id in this iteration is : "+ id);
Query query = session.createQuery("update MyTable set url =? where id=?);
query.setParameter(0,url);
query.setParameter(1,id);
query.executeUpdate();
}
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.