`
allen-zhe
  • 浏览: 14996 次
社区版块
存档分类
最新评论

Hibernate大数据量操作解决方案

阅读更多
阅读了Hibernate的Reference之后,可以采用批量处理的方法,当插入的数据超过10000时,就flush session并且clear。
下面是一个测试method。
 1/** *//**
 2     * 测试成批插入数据的事务处理,返回是否成功
 3     * 
 4     * @param objPO Object
 5     * @return boolean
 6     */

 7    public boolean insertBatch(final Object objPO) {
 8        boolean isSuccess = false;
 9        Transaction transaction = null;
10        Session session = openSession();
11        try {
12            transaction = session.beginTransaction();
13            for (int i = 0; i < 100000; i++{
14                session.save(objPO);
15                if (i % 50 == 0{
16                    // flush a batch of inserts and release memory
17                    session.flush();
18                    session.clear();
19                }

20            }

21            transaction.commit();
22            logger.info("transaction.wasCommitted:"
23                    + transaction.wasCommitted());
24            isSuccess = true;
25        }
 catch (HibernateException ex) {
26            if (transaction != null{
27                try {
28                    transaction.rollback();
29                    logger.error("transaction.wasRolledBack:"
30                            + transaction.wasRolledBack());
31                }
 catch (HibernateException ex1) {
32                    logger.error(ex1.getMessage());
33                    ex1.printStackTrace();
34                }

35            }

36            logger.error("Insert Batch PO Error:" + ex.getMessage());
37            ex.printStackTrace();
38        }
 finally {
39            if (transaction != null{
40                transaction = null;
41            }

42            session.close();
43        }

44        return isSuccess;
45    }

46

这只是简单的测试,实际项目中遇到的问题,要比这个复杂得多。
这时候,我们可以让Spring来控制Transaction,自己来控制Hibernate的Session,随时更新数据。
首先,利用HibernateDaoSupport类来自定义个方法打开Session;
1public Session openSession(){
2        
3        return getHibernateTemplate().getSessionFactory().openSession();
4        
5    }
然后,用打开的Session处理你的数据;
 1protected void doBusiness(Session session) {
 2
 3        while (true{
 4            //do your business with the opening session        
 5            someMethod(session);
 6            session.flush();
 7            session.clear();
 8            logger.info("good job!");            
 9        }
       
10}

每做一次数据操作,就更新一次Session,这样可以保证每次数据操作都成功,否则就让Spring去控制它roll back吧。

最后,记得关闭Session。

1 Session session  =  openSession();
2 doBusiness(session);
3 session.close();  // 关闭session


至于处理速度呢,不会慢到哪儿去的,已经试验过了。; - )

还等什么,赶快试试吧!

 
                                                                               THE END

分享到:
评论

相关推荐

    Hibernate中大量数据的更新

    Hibernate 中大量数据的更新 Hibernate 是一个流行的基于 Java 的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在将大量数据插入到数据库时,Hibernate 经常会出现性能和...

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

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

    Hibernate 多数据库支持解决方案

    Hibernate是一个强大的Java持久化框架,它允许开发者将对象模型与关系数据库进行映射,从而简化了数据库操作。在处理多数据库支持时,Hibernate提供了一些策略和技巧来确保应用程序能够在不同类型的数据库之间灵活...

    Hibernate操作持久化对象

    它是一个开源的Java持久化框架,由Gavin King创建,并逐渐发展成为Java世界中主流的持久化解决方案。Hibernate的核心在于提供对象-关系映射(ORM)服务,使得开发者能够以面向对象的方式来管理和操作数据库中的数据,...

    Struts+Spring+Hibernate通用分页解决方案

    综上所述,"Struts+Spring+Hibernate通用分页解决方案"是一个高效的Java Web开发策略,它充分利用了三大框架的优势,实现了数据的灵活分页,提高了应用的性能和用户体验。通过深入理解并实践这些技术,开发者可以更...

    使用 Hibernate Shards 对数据进行切分

    Hibernate Shards是在Hibernate的基础上,通过数据切分策略实现的一种分布式数据库解决方案。它允许我们将一个大型数据库逻辑上分割成多个较小的数据库(称为“分片”),每个分片可以独立运行在不同的服务器上,...

    Java EE轻量级解决方案S2SH

    在Hibernate部分主要讲解O/R Mapping的设计理念,Hibernate对O/R Mapping的支持,Hibernate的配置及多种关系映射的实现,以及HQL查询数据。在Spring部分主要讲解IoC的原理,Spring对Bean的管理机制,Spring AOP编程...

    Hibernate Hibernate5 讲义 PDF

    因此,除了对象序列化外,还有JDBC直接操作和ORM等持久化解决方案。 ORM框架,比如Hibernate,是对象持久化的高级抽象。它通过将业务数据映射为内存中的对象,并使用面向对象的方式来操作这些数据。ORM的优势在于...

    Hibernate数据持久层框架是一种Java语言下的对象关系映射解决方案.rar

    Hibernate 是一种Java语言下的对象关系映射解决方案。 它是使用GNU宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate也是目前Java...

    Hibernate数据持久层框架v5.2.13

    Hibernate是一种Java语言下的对象关系映射解决方案。 它是使用GNU宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate也是目前Java...

    java excel大数据量导出demo,可支持模板导出

    这个"java excel大数据量导出demo"提供了一个高效、灵活的解决方案,它支持模板导出,分页查询,以及处理大数据量的能力。在这个项目中,开发者采用了Apache POI库的SXSSFWorkbook子类,这是一个专门为处理大量数据...

    hibernate N+1问题解决办法

    此问题源于不恰当的数据加载策略,可能导致数据库查询效率低下,尤其在大数据量的情况下,会严重影响应用的响应速度。本文将详细探讨Hibernate中的N+1问题,并提供有效的解决方案。 **N+1查询问题的由来** 当我们...

    Java EE 轻量级解决方案 — SSH 青岛东合信息技术有限公司 青岛海尔软件公司 著 教材源码 _ 第二章 Struts2 基础

    在SSH(Struts2、Spring、Hibernate)集成解决方案中,Struts2承担了控制层的角色,为开发者提供了一种有效管理请求和视图的机制。 **Struts2框架基础** 1. **架构原理**:Struts2基于拦截器模型,通过Action类...

    Java Web 基于Spring Struts Hibernate 轻量级架构开发实例

    总的来说,Spring、Struts和Hibernate的组合为Java Web开发提供了一套强大且灵活的解决方案,帮助开发者构建高效、可扩展的应用程序。通过深入学习和实践,你可以掌握这一轻量级架构,提升自己的专业技能。

    Android sqlite数据库操作通用框架AHibernate

    在 Android 开发中,SQLite 是一个重要的本地数据存储解决方案,它是一个轻量级的数据库系统,适合于移动设备。为了简化对 SQLite 数据库的操作,开发者通常会创建一些抽象层或框架,如 AHibernate,它借鉴了 Java ...

    spring+hibernate+atomikos多数据源

    Spring、Hibernate和Atomikos的组合就是一种强大的解决方案,它们可以协同工作以支持多数据源的分布式事务处理。接下来,我们将深入探讨这些技术以及如何配置它们来实现多数据源。 1. **Spring**: Spring是一个...

    hibernate权威整理文档!

    Hibernate作为一个轻量级的Java EE解决方案,广泛应用于各种项目中。 二、初识Hibernate 1. Hibernate环境搭建 要开始使用Hibernate,首先需要下载Hibernate的开发包(如3.6.10版本)以及相关的依赖库,包括Slf4j...

    hibernate4.x jar

    《深入理解Hibernate4.x及其核心组件》 Hibernate4.x作为Java领域中著名的对象关系映射(ORM)框架,...而深入学习和实践,如利用Hibernate Search实现全文检索,将使开发者在处理大数据量和复杂查询时更加游刃有余。

    Hibernate-Extension Middlegen-Hibernate

    总结来说,Hibernate扩展Middlegen-Hibernate的组合,为Java开发提供了一种高效且灵活的数据库映射解决方案。它通过自动化的方式,降低了数据库到Java对象映射的复杂性,提升了开发效率,是现代企业级应用开发中不可...

Global site tag (gtag.js) - Google Analytics