使用hibernate Criteria更新多行

我正在尝试运行更新查询,在sql中看起来像这样:

update studentMaster set sess_status = 'G' where ACADEM_YEAR = COURSE_YEAR; 

我试图使用Criteria重新创建查询,如下所示:

 public void updateSessionStatus() { Session sess = factory.openSession(); Transaction tx = null; try { tx = sess.beginTransaction(); Criteria crit = sess.createCriteria(CollegeStudentsMaster.class); crit.add(Restrictions.eqProperty("academicYear", "courseYears")); CollegeStudentsMaster e = (CollegeStudentsMaster) crit.uniqueResult(); e.setSessionStatus("G"); sess.saveOrUpdate(e); tx.commit(); } catch (HibernateException asd) { if (tx != null) { tx.rollback(); } log.debug(asd.getMessage()); } finally { sess.close(); } } 

这是行不通的,因为满足这个条件的行很多,我的独特结果就是这里的问题。 如何将其转换为符合条件的所有行的更新。 我不想使用HQL查询,我宁愿使用Criteria。

 public void updateSessionStatus() { Session sess = factory.openSession(); Transaction tx = null; try { tx = sess.beginTransaction(); Criteria crit = sess.createCriteria(CollegeStudentsMaster.class); crit.add(Restrictions.eqProperty("academicYear", "courseYears")); // Here is updated code ScrollableResults items = crit.scroll(); int count=0; while ( items.next() ) { CollegeStudentsMaster e = (CollegeStudentsMaster)items.get(0); e.setSessionStatus("G"); sess.saveOrUpdate(e); if ( ++count % 100 == 0 ) { sess.flush(); sess.clear(); } } tx.commit(); } catch (HibernateException asd) { if (tx != null) { tx.rollback(); } log.debug(asd.getMessage()); } finally { sess.close(); } } 

总是建议执行非常接近数据库的批量操作,并且我们不需要在会话中保持更新的对象,除非它们是必需的,因此在执行批量操作时尽量避免在会话中加载对象。