日期:2014-05-20  浏览次数:20657 次

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..
------解决方案--------------------
探讨
请问下 那只设置一个可以吗?

在配置文件中写 或者 只在程序中写