I am trying to execute update
HQL
query inside iterator for multiple records in java. But when I execute, it updates only alternate record by skipping next record. If I will just print iterator objects in log, without execute update query,it prints all objects. So why it's skipping object each next, when I am executing update
inside Iterator?
My Code:
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();
}
If I have 4 elements in myList
it will just update for 2nd and 4th by skippint 1st and 3rd.
If you need to access the same iterator element multiple times in the same loop iteration, you shouldn't call iter.next()
multiple times, since each call advances the iterator. Instead, call iter.next()
once and store the result in a variable :
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();
}
please use
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();
}
Its a good practice to use while-loop
when using Iterator
.
You should try:
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();
}
Hope it helps!
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.