`
yaozhiqiang109
  • 浏览: 119426 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate批量插入、更新、删除

阅读更多

 

最近一个项目中需要对数据进行统计,然后插入到库中,数据大概几万,一条条搞速度太慢,这就必然要批量插入,一开始

 

用单线程跑,发现速度也不是很快,后面改用多线程,速度一下子上来啦,中间遇到几个问题:

 

一:就是在批量插入的时候,由于是手动提交事务的,会导致事务提交后不能重新开始,导致后面不能继续插入数据了,后

 

面在批量插入方法加上synchronized就OK了。

 

二:由于统计数据后,是插入到几个表,一开始是想一个一个表一批一批来批量插入,后面发现不行,只执行最开始的那个

 

批量操作后面的就不插入了,原因应该是因为事务是手动提交的,具体原因还有待详查,后面将批量插入的List改成泛型,

 

hibernate根据对象自动插入到相应的表,貌似这点让人爽。

 

批量插入:

/**
	 * 批量插入
	 * @param entityList
	 * @param size
	 * @create_time 2011-6-9 上午09:27:26
	 */
	public synchronized void batchSave(List<T> entityList,int size){
	    Transaction transaction=getSession().getTransaction();
	    Assert.notNull(entityList, "entityList不能为空");
        for (int i=0;i< entityList.size();i++) {
            getSession().saveOrUpdate(entityList.get(i));
            if( i %size==0){
                getSession().flush();
                getSession().clear();
                transaction.commit();
                transaction=getSession().beginTransaction();
            }
        }
        transaction.commit();
	}
 

批量修改或删除

 

 

/**
	 * 执行HQL进行批量修改/删除操作.
	 * 
	 * @param values 数量可变的参数,按顺序绑定.
	 * @return 更新记录数.
	 */
	public int batchExecute(final String hql, final Object... values) {
		return createQuery(hql, values).executeUpdate();
	}

/**
	 * 根据查询HQL与参数列表创建Query对象.
	 * 与find()函数可进行更加灵活的操作.
	 * 
	 * @param values 数量可变的参数,按顺序绑定.
	 */
	public Query createQuery(final String queryString, final Object... values) {
		Assert.hasText(queryString, "queryString不能为空");
		Query query = getSession().createQuery(queryString);
		if (values != null) {
			for (int i = 0; i < values.length; i++) {
				query.setParameter(i, values[i]);
			}
		}
		return query;
	}
0
0
分享到:
评论
1 楼 fanjianjun0608 2012-12-19  
/** 
     * 批量插入 
     * @param entityList 
     * @param size 
     * @create_time 2011-6-9 上午09:27:26 
     */ 
    public void batchSave(List<T> entityList,int size){  
        Transaction transaction=getSession().beginTransaction();  
        Assert.notNull(entityList, "entityList不能为空");  
        for (int i=0;i< entityList.size();i++) {  
            getSession().saveOrUpdate(entityList.get(i));  
            if( i %size==0){  
                getSession().flush();  
                getSession().clear();  
 
            }  
        }  
        transaction.commit();  
    }


这样不行吗?我执行不了你的那个代码。你上面的那个代码有问题!你测试过吗?

你上面的代码事务都没有打开!怎么提交。会抛异常的把!

相关推荐

    Hibernate+JDBC实现批量插入、更新及删除的方法详解

    Hibernate+JDBC实现批量插入、更新及删除的方法详解 概述:本文主要介绍了Hibernate+JDBC实现批量插入、更新及删除的方法,通过实例形式详细分析了Hibernate与JDBC针对数据库的批量操作相关实现技巧。 知识点一:...

    HQL批量插入、更新和删除

    ### HQL批量插入、更新和删除 #### 一、概述 在进行数据库操作时,批量处理数据是一项常见的需求。为了提高效率并减少网络传输开销,HQL(Hibernate Query Language)提供了一种灵活的方式来实现这一目标。HQL是...

    Java中Hibernate的批量插入

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

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

    对于更新和删除操作,可以使用`scroll()`方法,这在Hibernate 2.1.6或更高版本中是支持的。`scroll()`方法返回一个`ScrollableResults`对象,允许我们以游标方式处理结果集,这在处理大量数据时非常有效。同样,我们...

    Hibernate批量处理数据

    因此,本文将详细介绍Hibernate如何高效地进行批量数据处理,包括批量插入、批量更新和批量删除。 #### 二、批量插入 在批量插入数据时,直接使用循环逐一保存的方式容易导致内存溢出。这是因为Hibernate的Session...

    Hibernate批量处理

    批量处理对于需要在短时间内处理大量数据的应用尤其重要,如批量更新、批量插入或批量删除等场景。 #### 二、批量处理的必要性 在实际开发过程中,当需要处理大量数据时,传统的逐条处理方式不仅占用大量的内存...

    hibernate批量操作实例详解

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

    Hibernate

    本文将深入探讨在Hibernate框架下,如何有效地处理大规模数据的批量插入、更新和删除操作。 #### 批量数据插入 传统的Hibernate数据插入方式往往采用单次插入单个实体对象的方式,这在处理小规模数据时效率尚可,...

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

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

    hibernate-extensions-2.1.3.zip ,middlegen for hibernate

    - Batch处理:支持批量插入、更新和删除操作,提高大数据量操作的性能。 - Event监听器:允许在特定的持久化操作前后执行自定义逻辑,如事务处理、日志记录等。 - 邮件服务:集成邮件发送功能,实现业务流程中的...

    Hibernate框架jia包

    - 批量操作:利用批处理更新或删除,减少数据库交互次数。 -延迟加载(Lazy Loading):只在需要时加载关联对象,避免数据冗余。 8. **HQL和Criteria API**: HQL是面向对象的查询语言,类似于SQL但更接近Java。...

    hibernate3.5完整jar

    10. **批处理操作**:通过设置批处理大小,Hibernate可以优化批量插入、更新和删除的性能,减少与数据库的交互次数。 11. **JPA支持**:虽然Hibernate最初是一个独立的ORM框架,但在3.5版本中,它也兼容Java ...

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

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

    Hibernate 中文参考文档

    为了提高性能,Hibernate提供了批量插入、更新和删除功能,以及延迟加载、批处理等优化策略。合理使用这些特性可以显著提升应用性能。 综上所述,Hibernate中文参考文档详尽地阐述了如何使用Hibernate进行数据持久...

    hql批量删除

    下面将详细介绍HQL在批量删除和批量插入数据方面的知识点。 批量删除数据: 在Hibernate中,如果要批量删除数据,使用Session的delete()方法来删除每一个对象将是非常低效的,尤其是当要删除的对象数量很多时。为此...

    hibernate包详解+hibernatePPT

    2. **批处理**:批量插入、更新和删除数据,减少数据库交互次数。 3. **延迟加载(Lazy Loading)**:只在真正需要时加载关联对象,减少内存消耗。 **六、hibernatePPT** 提供的`hibernatePPT`可能是对Hibernate...

    Hibernate Developer Guide

    Hibernate支持批量插入和更新操作,这对于处理大量数据非常有用。同时介绍了StatelessSession和Hibernate查询语言(HQL)用于DML操作。 ### 锁机制 Hibernate中的锁机制用来管理并发事务,以确保数据的一致性。文档...

    MLDN_Hibernate开发实战讲解视频教程

    9. 批量操作:为了提高性能,Hibernate支持批量插入、更新和删除,以及批处理查询。 10. JPA集成:Hibernate也实现了Java Persistence API(JPA),提供了一种标准的方式来使用ORM服务。 通过"MLDN_Hibernate开发...

    Hibernate框架技术课件ppt

    学习者将学习如何执行批量插入、更新和删除,以及如何使用Transaction接口进行事务控制,保证数据的一致性。 通过这个完整的Hibernate框架技术课件,你将能够全面掌握Hibernate的核心功能和最佳实践,从而在实际...

Global site tag (gtag.js) - Google Analytics