在配置文件中写
<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..
------解决方案--------------------