使用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(); } }
总是建议执行非常接近数据库的批量操作,并且我们不需要在会话中保持更新的对象,除非它们是必需的,因此在执行批量操作时尽量避免在会话中加载对象。
- Spring JpaRepository – 分离和附加实体
- 如何使用hibernate在spring boot中调用MySQL存储过程?
- 针对不同字段值长度的Hibernate Criteria
- Send String second Argument IdentifierGenerator – Hibernate
- 我可以使用带有beanvalidation的hibernate实体注释吗?
- java.lang.NoClassDefFoundError:无法初始化类org.com.hibernate.HibernateUtil
- 在JPA中将单个表映射到可嵌入集合
- org.hibernate.LazyInitializationException:无法初始化代理 – 没有会话?
- 如何使用Hibernate动态创建数据库中的表?