`

hibernate的批量处理

阅读更多

在一般情况下,使用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();

 

1
3
分享到:
评论
1 楼 贰哲子 2012-03-15  
session.flush()具体作用是什么?[size=xx-small][/size]

相关推荐

    Hibernate批量处理数据

    看完该文件你就可以最高效率的批量处理数据

    Hibernate批量处理

    高效的进行批量数据的处理方案,留作参考。

    Hibernate批量处理海量数据的方法

    主要介绍了Hibernate批量处理海量数据的方法,较为详细的分析了Hibernate批量处理海量数据的原理与相关实现技巧,需要的朋友可以参考下

    Hibernate下数据批量处理解决方案

    很多人都对Java在批量数据的处理方面是否是其合适的场所持有怀疑的念头,由此延伸,...下面以Hibernate为例来做为说明,假如我们真的不得不在Java中使用Hibernate来对数据进行批量处理的话。 向数据库插入100 000条数据

    在Hibernate中处理批量更新和批量删除

    在Hibernate中处理批量更新和批量删除

    在Hibernate应用中处理批量更新和批量删除

    在Hibernate应用中如何处理批量更新和批量删除

    hibernate批量操作实例详解

    主要介绍了hibernate批量操作,结合实例形式分析了Hibernate实现批量插入,更新及删除等操作的具体实现技巧,需要的朋友可以参考下

    jsp Hibernate批量更新和批量删除处理代码.docx

    jsp Hibernate批量更新和批量删除处理代码.docx

    彻底解决hibernate常见难点.zip

    Hibernate处理1-N关系时保存技巧、Hibernate缓存机制、Hibernate批量处理数据、Hibernate三种继承映射策略、hibernate映射体系、Hibernate主键生成策略、持久层DAO设计建议、基于xml文件的bean、使用HibernateAPI在...

    jsp Hibernate批量更新和批量删除处理代码

    批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。

    2022年Hibernate下数据批量处理Java教程.docx

    2022年Hibernate下数据批量处理Java教程.docx

    浅析Hibernate下数据批量处理方法.doc

    不建议用Hibernate,它的insert效率实在不搞,不过最新版本的Hibernate似乎已经在批量处理的时候做过优化了,设置一些参数如batch_size,不过性能我没有测试过

    Java中Hibernate的批量插入

    Hibernate完全以面向对象的方式来操作数据库,当程序里以面向对象的方式操作持久化对象时,将被自动转换为对数据库的操作。...为了面对这种批量处理的场景,Hibernate提供了批量处理的解决方案。下面分别

    Hibernate管理Session和批量操作分析

    主要介绍了Hibernate管理Session和批量操作的技巧,包括Hibernate管理Session、批量处理数据等的常用技巧及注意事项,具有一定的参考借鉴价值,需要的朋友可以参考下

    Hibernate

    Hibernate下数据批量处理解决方案

    Hibernate+中文文档

    13. 批量处理(Batch processing) 13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) ...

    Hibernate 课件及源代码

    代码基于 Hibernate4.x 录制。内容涵盖安装 Hibernatetools 插件、Session 核心方法、持久化对象生命周期、对象关系映射(1-n、1-1、n-n、继承映射)、检索...Session、批量处理等 Hibernate 企业级开发的核心技术。

    Hibernate5教程文档大纲

    HIbernate完整文档,有教程有截图,也有详细步骤,其中包括ORM思想介绍、框架原理、原理图、核心对象、核心配置文件、关联关系、映射文件、批量处理、事务控制、Hibernate缓存以及注解等

    hibernate3.2中文文档(chm格式)

    13. 批量处理(Batch processing) 13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) ...

Global site tag (gtag.js) - Google Analytics