I have a list of object, for each object I am executing Session.update(), when should I call Session.flush()? After the list complete its iteration or after each update? The code segment is:
public void updateUserAssignmentInfo(final long itemId) {
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
session.flush();
session.setCacheMode(CacheMode.IGNORE);
List<UserAssignmentInfo> userAssignmentInfos = session.createQuery("from UserAssignmentInfo as userAssignmentInfo where userAssignmentInfo.itemId = " + itemId).list();
if (userAssignmentInfos.size() == 0) {
return null;
}
for (UserAssignmentInfo userAssignmentInfo : userAssignmentInfos) {
userAssignmentInfo.setIsCurrentlyAssigned(false);
session.update(userAssignmentInfo);
// should I call flush here?
}
session.flush(); // or here?
return null;
}
});
}
The latter one.
Also please have a look at:
http://docs.jboss.org/hibernate/core/3.5/reference/en/html/batch.html
Calling session flush at the end will cause that you have higher probability that query will be only soft parsed by database.