hiberante 实现批量导入数据时考虑session 二级缓存的处理
来源:互联网 发布:拉丁美洲知乎 编辑:程序博客网 时间:2024/06/17 02:01
转自: http://www.oecp.cn/hi/1007065435XCB/blog/948
hebinate 批量插入时候出现的内存溢出现象。
从hebinate 的官方文档里面我们可以看到这样的一批量导入的记录的实例
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for(int i=0;i<10000;i++){
Customer customer = new Customer(.....);
session.save(customer);
}
tx.commit();
session.close();
这段程序大概运行到 50 000 条记录左右会失败并抛出 内存溢出异常(OutOfMemoryException) 。 这是因为 Hibernate 把所有新插入的 客户(Customer)实例在 session级别的缓存区进行了缓存的缘故。
13.1. 批量插入(Batch inserts)
如果要将很多对象持久化,你必须通过经常的调用 flush()
以及稍后调用 clear()
来控制第一级缓存的大小。
Session session = sessionFactory.openSession();Transaction tx = session.beginTransaction(); for ( int i=0; i<100000; i++ ) { Customer customer = new Customer(.....); session.save(customer); if ( i % 20 == 0 ) { //20, same as the JDBC batch size //20,与JDBC批量设置相同 //flush a batch of inserts and release memory: //将本批插入的对象立即写入数据库并释放内存 session.flush(); session.clear(); }} tx.commit();session.close();
在项目开发的批量级导入时,我遇到这样的问题,因为 session二级缓存的clear(),和flush()方法导致无法正常导入,所以必须实行hibernate 抓取策略。
- hiberante 实现批量导入数据时考虑session 二级缓存的处理
- hibernate的二级缓存操作及session的管理方法及数据的批量处理
- hiberante 二级缓存
- 批量导入数据触发器处理
- 59、salesforce实现数据的批量处理
- C# 实现批量导入数据
- 小猫统计导入excel数据用于批量证书打印时,时间数据格式的规范化处理
- hiberante 二级缓存Ehcache使用
- hiberante二级缓存配置
- 一个实现数据批量从mongodb导入Mysql的方案
- Oracle 批量数据的导入
- BULK INSERT 实现批量数据导入
- 实现Excel数据批量导入到Access
- 网页实现批量数据导入功能
- 网页实现批量数据导入功能
- Java实现Excel表格数据批量导入
- ASP.NET数据列表“全选”,批量处理的JS实现
- prepareStatement的批量处理数据
- 配置管理入门
- Oracle获取执行计划的方法
- 使用Microsoft Visual C++来检测和隔离内存泄漏
- Android Canvas
- VC++动态链接库(DLL)编程
- hiberante 实现批量导入数据时考虑session 二级缓存的处理
- 荆棘之路
- securecrt6.1如何使用
- KD Tree
- 基于Linux内核SPI子系统工作机制
- fedora登录gnome出现"failed to load session ‘gnome’”解决方法
- MySQL Timestamp特别要注意得地方,居然默认自动更新,不过也可利用作为记录修改时间
- zlib用法简单说明
- C代码编译过程及汇编相关知识