我有一个对象列表,对于我正在执行Session.update()的每个对象,何时应调用Session.flush()?列表完成迭代之后还是每次更新之后?代码段是:
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;
}
});
}
最佳答案
后者。
还请看看:
http://docs.jboss.org/hibernate/core/3.5/reference/en/html/batch.html
最后调用会话刷新将导致您更有可能仅通过数据库对查询进行软分析。