`

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作为一种强大的对象关系映射(ORM)框架,提供了多种批量处理的方式以提高数据处理效率。批量处理对于需要在短时间内处理大量数据的应用尤其重要,如...

    Hibernate批量处理数据

    ### Hibernate批量处理数据 #### 一、概述 Hibernate作为一款流行的Java持久层框架,它能够以面向对象的方式处理数据库操作,极大地简化了开发过程。然而,在处理大量数据时,如果仍然采用逐条处理的方式,将会...

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

    以下是针对Hibernate批量处理海量数据的一些关键知识点和优化策略: 1. **理解Hibernate的工作原理**:Hibernate通过查询数据库获取数据,并将其转化为Java对象存储在内存中,这种做法在处理小量数据时非常便捷,但...

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

    在Java开发中,尤其是涉及到大数据量的处理时,人们往往会质疑ORM框架,如Hibernate,是否适合进行批量数据操作。然而,实际上,通过适当的技术手段,我们可以有效地解决Hibernate在批量处理时可能出现的性能问题。...

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

    本文将深入探讨在Hibernate中处理批量更新和批量删除的策略,以及如何优化这些操作,以提高数据库操作的效率。 ### 批量更新的常规方法 在Hibernate中,最直观的批量更新方式是通过循环遍历查询结果集,并对每个...

    hibernate批量删除

    ### Hibernate批量删除详解 #### 背景与概念 在Java开发中,处理大量数据时,经常需要执行批量操作,如批量更新或批量删除。这些操作对于提高应用程序性能至关重要,尤其是在涉及成千上万条记录的情况下。...

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

    在Hibernate应用中处理批量更新和批量删除时,开发者应充分考虑数据库性能和资源消耗,合理利用Hibernate提供的高级功能和JDBC API,以及数据库自身的特性,以实现高效、稳定的批量数据处理。通过上述策略的应用,...

    hibernate批量操作实例详解

    【hibernate批量操作实例详解】 批量操作是提高数据库处理效率的重要手段,特别是在处理大量数据时,能够显著提升性能并减少资源消耗。在Hibernate中,批量操作主要包括批量插入、批量更新和批量删除。以下是对这些...

    Hibernate中大量数据的更新

    Hibernate 提供了两种批量更新机制:一级缓存(First-Level Cache)和批量抓取(Batching)。 一级缓存 Hibernate 的一级缓存是指 Session 对象中缓存的所有对象。在批量更新时,如果不及时清除一级缓存,可能会...

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

    ### Hibernate批量更新 Hibernate在执行批量更新操作时,通常会先加载所有符合条件的实体到内存中,然后逐个更新每个实体对象的状态,之后再将这些状态变化同步到数据库中。这会导致大量的内存占用和数据库访问,...

    struts2 hibernate spring 整合批量删除源码

    总的来说,这个批量删除源码示例展示了如何利用Struts2处理HTTP请求,Spring管理依赖,以及Hibernate与数据库交互,是学习和理解三大框架整合开发的一个实践案例。通过分析和理解这段代码,开发者可以提升自己在企业...

    JSF+hibernate实现批量删除

    本篇文章将详细探讨如何利用JSF与Hibernate相结合来实现批量删除功能,以及在CRUD(创建、读取、更新和删除)操作中的应用。 首先,我们需要理解JSF的工作原理。JSF是一个基于组件的MVC(Model-View-Controller)...

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

    本文件主要探讨了如何使用Hibernate进行批量更新和批量删除处理,这些操作在处理大量数据时尤其重要,因为它们可以显著提高应用的性能。下面我们将深入解析这两个主题。 批量更新在Hibernate中通常涉及在一个事务中...

    彻底解决hibernate常见难点.zip

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

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

    Hibernate 下数据批量处理 Java 教程 本文主要介绍了使用 Hibernate 实现数据批量处理的方法和注意事项。在 Java 中,对数据批量处理的需求非常重要,但许多人对 Java 是否适合批量处理持有怀疑念头。实际上,如果...

    Hibernate笔记

    【Hibernate批量处理】 批量处理能提高数据操作效率,减少数据库交互次数。在Hibernate中,批量处理主要包括插入和更新。 A. 批量插入 批量插入时,可以使用for循环来创建和保存对象,为了防止内存溢出,可以在...

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

    标题"浅析Hibernate下数据批量处理方法"和描述中提到,早期的Hibernate在批量插入时可能存在效率问题,但最新版本已经进行了优化,例如通过设置`batch_size`参数来提高批量处理的性能。`batch_size`设置的是JDBC...

    hibernate批量删除.txt

    ### Hibernate 批量删除知识点详解 #### 一、概述 在进行数据库操作时,经常会遇到需要批量处理数据的情况,例如批量更新或批量删除等。利用Hibernate框架可以方便地实现这些功能,提高开发效率并减少资源消耗。...

    C#Hibernate数据库海量读写快速存储

    1. 批量操作:在处理大量数据时,避免单条插入或更新,应采用批量处理,将多条数据一次性提交,以减少网络通信和数据库事务开销。 2. 数据分片:将大数据分散到多个数据库或表中,通过分布式处理提高读写速度。 3. ...

    Java中Hibernate的批量插入

    针对这种情况,Hibernate提供了一些批量处理的解决方案。 批量插入是处理大量数据插入的一种有效方法。通常,初学者可能会尝试一次性创建大量对象并调用Session的save()方法来保存,但这会导致所有对象被存储在...

Global site tag (gtag.js) - Google Analytics