session = HibernateUtils.getSession();
session.beginTransaction();
for (int i=0; i<1000; i++) {
Student student = new Student();
student.setName("s_" + i);
session.save(student);
if ( i % 30 == 0) {
session.flush();
session.clear();
}
}
session.getTransaction().commit();
这种形式的批处理与在hibernate.cfg.xml中定义<property name="hibernate.jdbc.batch_size">30</property>有什么区别?后者会不会清理缓存?
执行后hibernate会发出sql语句,也就是执行sql,然后清理缓存,上面的代码可能是效率方面的考虑,因为是save1000条数据,缓存里面会保存1000个记录,配置的那个<property>是每30条发出语句,应该是不会清理缓存的