Hibernate批量处理

  1. 使用Hibernate将100 000 条记录插入到数据库的一个很自然的做法可能是这样的:
  2. Session session = sessionFactory.openSession();
  3. Transaction tx = session.beginTransaction();
  4. for ( int i=0; i<100000; i++ )
  5. {
  6. Customer customer = new Customer(.....);
  7. session.save(customer);
  8. }
  9. tx.commit();
  10. session.close();
  11. 这段程序大概运行到 50 000 条记录左右会失败并抛出内存溢出异常(OutOfMemoryException)。 这是因为 Hibernate 把所有新插入的客户(Customer)实例在 session级别的缓存区进行了缓存的缘故。
  12. 如果要执行批量处理并且想要达到一个理想的性能, 那么使用JDBC的批量(batching)功能是至关重要。将JDBC的批量抓取数量(batch size)参数设置到一个合适值 (比如,10-50之间):
  13. hibernate.jdbc.batch_size 20      hibernate.jdbc.batch_size 可以在Hibernate配置文件中配置
  14. 如果要将很多对象持久化,则必须通过经常的调用flush() 以及稍后调用clear()来控制第一级缓存的大小。
  15. Session session = sessionFactory.openSession();
  16. Transaction tx = session.beginTransaction();
  17. for ( int i=0; i<100000; i++ )
  18. {
  19. Customer customer = new Customer(.....);
  20. session.save(customer);
  21. if ( i % 20 == 0 ) //20, same as the JDBC batch size //20,与JDBC批量设置相同
  22. {
  23. session.flush(); //flush a batch of inserts and release memory:
  24. session.clear(); //将本批插入的对象立即写入数据库并释放内存
  25. }
  26. }
  27. tx.commit();
  28. session.close();
转自:http://hi.baidu.com/flashingboy/blog/item/0dbea1efc5cc8e2f2cf534a1.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值