gpt4 book ai didi

java - 使用 hibernate 条件更新多行

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:17:48 25 4
gpt4 key购买 nike

我正在尝试运行一个在 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();
}
}

总是建议在非常靠近数据库的地方执行批量操作,除非需要,否则我们不需要在 session 中保留更新的对象,因此在执行批量操作时尽量避免在 session 中加载对象。

关于java - 使用 hibernate 条件更新多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24847466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com