`
天上掉下个喜欢编程的榕哥哥
  • 浏览: 28973 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate批量插入数据

阅读更多

    使用Hibernate将大量的记录(如100000条)插入到数据库时,很自然的的一种做法可能是:

 

  Session session = sessionFactory.openSession();
  Transaction tx = session.beginTransaction();
  for ( int i=0; i<100000; i++ ) {
       Customer customer = new Customer(.....);
       session.save(customer);
  }
  tx.commit();
  session.close();

 

       这段程序大概运行到 50 000 条记录左右会失败并抛出 内存溢出异常(OutOfMemoryException) 。 这是因为 Hibernate 把所有新插入的 客户(Customer)实例在 session级别的缓存区进行了缓存的缘故。

       如果你要执行批量处理并且想要达到一个理想的性能, 那么使用JDBC的批量(batching)功能是一个可行的选择。将JDBC的批量抓取数量(batch size)参数设置到一个合适值 (比如,10-50之间):

hibernate.jdbc.batch_size 20

注意,假若你使用了identiy标识符生成器,Hibernate在JDBC级别透明的关闭插入语句的批量执行。

 

       你也可能想在执行批量处理时关闭二级缓存:hibernate.cache.use_second_level_cache false

但是,这不是绝对必须的,因为我们可以显式设置CacheMode来关闭与二级缓存的交互。

 

 批量插入(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,与JDBC批量设置相同

             //将本批插入的对象立即写入数据库并释放内存
            session.flush();
            session.clear();
        }
  }
  tx.commit();
  session.close();

 

 

分享到:
评论

相关推荐

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

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

    Hibernate中大量数据的更新

    Hibernate 的批量抓取机制允许将多个INSERT 语句合并成一个批量插入语句,从而提高性能。在 Hibernate 配置文件中,可以设置 `hibernate.jdbc.batch_size` 参数来指定批量抓取的大小。 如何实现批量更新 在 ...

    Hibernate批量处理数据

    在批量插入数据时,直接使用循环逐一保存的方式容易导致内存溢出。这是因为Hibernate的Session维护了一个一级缓存,用于存储当前会话期间的所有实体对象。当对象数量过大时,会导致内存不足。为了解决这一问题,可以...

    Hibernate插入数据

    10. **批量插入**:对于大量数据插入,可使用SQL的批处理或Hibernate的批处理功能,如Session的batch_size配置,提高性能。 在实际开发中,我们还需要注意一些优化技巧,比如懒加载(@OneToMany、@ManyToOne等关系...

    Java中Hibernate的批量插入

    然而,在处理大量数据的批量操作时,如批量插入、更新或删除,如果不采取适当的策略,可能会导致性能问题甚至出现内存溢出异常。针对这种情况,Hibernate提供了一些批量处理的解决方案。 批量插入是处理大量数据...

    HQL批量插入、更新和删除

    在批量插入数据时,需要注意内存管理问题。如果一次性插入大量数据,可能会导致`OutOfMemoryError`异常。为了避免这种情况的发生,在进行批量插入操作时,可以采用以下策略: 1. **分批提交**:将大批量的数据分割...

    Hibernate批量处理

    示例代码展示了一个批量插入十万条数据的过程,每次批量插入20条记录: ```java Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for (int i = 0; i ; i++) { // ...

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

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

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

    在批量插入数据时,我们可以使用以下代码: ``` Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for (int i=0; i; i++) { Customer customer = new Customer(...)...

    往数据库插入数据,相同的不插入

    - 使用批量插入的方式代替逐条插入,可以显著减少数据库操作次数,从而提升整体性能。 2. **异常处理**: - 在实际应用中,还需要添加适当的异常处理机制,以确保程序的健壮性。例如,捕获并处理可能发生的SQL...

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

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

    hibernate批量操作实例详解

    Hibernate批量插入的常见问题在于,如果一次性保存大量对象,会占用大量内存,可能导致`OutOfMemoryException`,因为默认情况下,Session一级缓存会存储所有待持久化的对象。为了避免这种情况,我们需要定期将缓存...

    Struts2批量插入

    Struts2批量插入是Web开发中常见的操作,主要用于提高数据处理效率,特别是在处理大量数据时。Struts2作为一款流行的Java MVC框架,提供了强大的功能来支持这种操作。本篇文章将深入探讨Struts2如何实现批量插入,并...

    hibernate(一对多,多对一映射)操作

    - 增加:在保存父实体时,可以同时保存其关联的子实体,Hibernate会自动处理子实体的插入操作。对于多对一关系,只需要在父实体中设置子实体的引用即可。 - 查询:可以通过HQL(Hibernate Query Language)或者 ...

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

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

    Hibernate

    ### Hibernate批量数据处理详解 在IT领域,尤其是企业级应用开发中,Hibernate作为一款流行的ORM(Object Relational Mapping)框架,被广泛应用于Java应用程序中,用于简化数据持久化层的开发工作。然而,当涉及到...

    Hibernate数据持久层框架 v6.4.4.zip

    6. 批量操作:Hibernate提供了批量插入、更新和删除的方法,可以有效减少数据库操作次数,提高性能。 7. 异常体系:Hibernate有一套完整的异常体系,如`HibernateException`是所有Hibernate异常的基类,帮助开发者...

    Hibernate使用指南

    * 使用 Hibernate:使用 Hibernate 来操作数据库,例如执行查询、插入、更新、删除等操作。 四、 Hibernate 的配置 Hibernate 的配置主要包括以下几个方面: * dialect:数据库方言,每个数据库有不同的数据库...

    hibernate与mybatis一起使用取长补短

    例如,批量插入、分页查询、联表查询等。 3. **事务管理**: Hibernate的事务管理功能强大,适用于需要分布式事务的场景。而对于局部的、简单事务控制,MyBatis的灵活配置也能满足需求。 4. **灵活性**: 结合两者,...

Global site tag (gtag.js) - Google Analytics