Java 使用hibernate条件更新多行
我正在尝试运行更新查询,该查询在sql中如下所示:Java 使用hibernate条件更新多行,java,hibernate,persistence,Java,Hibernate,Persistence,我正在尝试运行更新查询,该查询在sql中如下所示: update studentMaster set sess_status = 'G' where ACADEM_YEAR = COURSE_YEAR; 我正在尝试使用条件重新创建查询,如下所示: public void updateSessionStatus() { Session sess = factory.openSession(); Transaction tx = null; try
update studentMaster set sess_status = 'G' where ACADEM_YEAR = COURSE_YEAR;
我正在尝试使用条件重新创建查询,如下所示:
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查询,而是使用条件
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();
}
}
人们总是建议执行非常接近数据库的批量操作,除非需要,否则我们不需要在会话中保持更新的对象,因此在执行批量操作时尽量避免在会话中加载对象