Hibernate 批量处理语句
在配置文件中写
<property name="hibernate.jdbc.batch_size">20</property>
和在程序中写
Java code
while(xxx) {
.....
session.update(object);
if(count%20==0) {
session.flush();
session.cleat();
}
count++;
}
有什么区别.
为什么要在配置中 和 程序中同时设置,批量语句的大小
------解决方案--------------------关注
------解决方案--------------------没区别吧。
不需要同时设置吧。。
------解决方案--------------------
第一个是jdbc的..第二个是Hibernate的一级缓存Session,session的执行update方法是并不是马上写入数据而是缓存在内存里面,当你处理大批量数据一次性更新的时候,会占用非常多的内存来缓存被更新的对象..有的甚至
内存溢出问题,所以批量的时候调用session.flush();session.clear();将本批(你的是20一批)插入的对象立即写入数据库并且释放内存,就是session.clear()来清空一级缓存..最后一般调用tx.commit();session.close();把剩下的插入数据库,关闭session..
------解决方案--------------------