在一般情况下,使用hibernate将500000条记录插入到数据库中,通常的做法是:
Session session = sessionFactory.openSession();
Transaction tran = session.beginTransaction();
for(int i =0;i<500000;i++){
Customer custmoer = new Custormer(....);
session.save(custmoer);
}
tran.commit();
session.close();
通常执行结果会抛出内存溢出异常(OutOfMemoryException).
原因是因为实例在session级别的缓存区进行了缓存的缘故;
解决方法使用JDBC的批量(Batching)功能。使用JDBC的批量抓取数量(Batch Size)参数设置到一个合适值;
hibernate.jdbc.batch_size 20
如果要将很多对象持久化,必须经常flush()以及使用clear()来控制一级缓存的大小。如下
Session session = sessionFactory.openSession();
Transaction tran = session.beginTransaction();
for(int i =0;i<500000;i++){
Customer custmoer = new Custormer(....);
session.save(custmoer);
if(i%20==0){
session.flush();
session.clear();
}
}
tran.commit();
session.close();
在批量更新中也可以使用,此外在返回很多数据的查询时,需要使用scroll方法以便充分利用数据库的游标带来的好处。
如:
Session session = sessionFactory.openSession();
Transaction tran = session.beginTransaction();
ScrollableResults customers = session.getNamedQuery("GetCustomers").setCacheMode(CacheModel.IGNORE).scroll(ScrollMode.FORWARD_ONLY);
int count = 0;
while(customers.next()){
Customer cust = (Customer )customers.get(0);
customer.update(...);
if(++count%20==0){
session.flush();
session.clear();
}
}
tran.commit();
session.close();
分享到:
相关推荐
看完该文件你就可以最高效率的批量处理数据
高效的进行批量数据的处理方案,留作参考。
主要介绍了Hibernate批量处理海量数据的方法,较为详细的分析了Hibernate批量处理海量数据的原理与相关实现技巧,需要的朋友可以参考下
很多人都对Java在批量数据的处理方面是否是其合适的场所持有怀疑的念头,由此延伸,...下面以Hibernate为例来做为说明,假如我们真的不得不在Java中使用Hibernate来对数据进行批量处理的话。 向数据库插入100 000条数据
在Hibernate中处理批量更新和批量删除
在Hibernate应用中如何处理批量更新和批量删除
主要介绍了hibernate批量操作,结合实例形式分析了Hibernate实现批量插入,更新及删除等操作的具体实现技巧,需要的朋友可以参考下
jsp Hibernate批量更新和批量删除处理代码.docx
Hibernate处理1-N关系时保存技巧、Hibernate缓存机制、Hibernate批量处理数据、Hibernate三种继承映射策略、hibernate映射体系、Hibernate主键生成策略、持久层DAO设计建议、基于xml文件的bean、使用HibernateAPI在...
批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。
2022年Hibernate下数据批量处理Java教程.docx
不建议用Hibernate,它的insert效率实在不搞,不过最新版本的Hibernate似乎已经在批量处理的时候做过优化了,设置一些参数如batch_size,不过性能我没有测试过
Hibernate完全以面向对象的方式来操作数据库,当程序里以面向对象的方式操作持久化对象时,将被自动转换为对数据库的操作。...为了面对这种批量处理的场景,Hibernate提供了批量处理的解决方案。下面分别
主要介绍了Hibernate管理Session和批量操作的技巧,包括Hibernate管理Session、批量处理数据等的常用技巧及注意事项,具有一定的参考借鉴价值,需要的朋友可以参考下
Hibernate下数据批量处理解决方案
13. 批量处理(Batch processing) 13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) ...
代码基于 Hibernate4.x 录制。内容涵盖安装 Hibernatetools 插件、Session 核心方法、持久化对象生命周期、对象关系映射(1-n、1-1、n-n、继承映射)、检索...Session、批量处理等 Hibernate 企业级开发的核心技术。
HIbernate完整文档,有教程有截图,也有详细步骤,其中包括ORM思想介绍、框架原理、原理图、核心对象、核心配置文件、关联关系、映射文件、批量处理、事务控制、Hibernate缓存以及注解等
13. 批量处理(Batch processing) 13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) ...