`
yaozhiqiang109
  • 浏览: 117357 次
  • 性别: 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针对数据库的批量操作相关实现技巧,需要的朋友可以参考下

    Java中Hibernate的批量插入

    例如我们调用Session的delete()方法,来删除持久化对象,Hibernate将负责删除对应的数据记录;当我们执行持久化对象的setter方法时,Hibernate将自动转换为底层的update语句,修改数据库的对应记录。  问题是:...

    hibernate批量操作实例详解

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

    Hibernate+中文文档

    13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1....

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

    13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1....

    HibernateAPI中文版.chm

    13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1....

    Hibernate中文详细学习文档

    13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1....

    Hibernate 中文 html 帮助文档

    13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1. 大小...

    最全Hibernate 参考文档

    13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. 大批量更新/删除(Bulk update/delete) 14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与...

    Hibernate教程

    14.1. 批量插入(Batch inserts) 14.2. 批量更新(Batch updates) 14.3. 大批量更新/删除(Bulk update/delete) 15. HQL: Hibernate查询语言 15.1. 大小写敏感性问题 15.2. from子句 15.3. 关联(Association...

    hibernate 体系结构与配置 参考文档(html)

    批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1. 大小...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1....

    hibernate3.04中文文档.chm

    14.1. 批量插入(Batch inserts) 14.2. 批量更新(Batch updates) 14.3. 大批量更新/删除(Bulk update/delete) 15. HQL: Hibernate查询语言 15.1. 大小写敏感性问题 15.2. from子句 15.3. 关联...

    Hibernate3+中文参考文档

    13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. 大批量更新/删除(Bulk update/delete) 14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与...

    hibernate 框架详解

    批量插入(Batch inserts) 14.2. 批量更新(Batch updates) 14.3. 大批量更新/删除(Bulk update/delete) 15. HQL: Hibernate查询语言 15.1. 大小写敏感性问题 15.2. from子句 15.3. 关联(Association)与...

    Hibernate参考文档

    13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1. 大小...

    低清版 大型门户网站是这样炼成的.pdf

    5.6.1 批量插入 322 5.6.2 批量更新 323 5.6.3 批量删除 324 5.7 hibernate的事务管理 325 5.7.1 事务边界声明 325 5.7.2 并发控制 326 5.7.3 悲观锁 327 5.7.4 乐观锁 328 5.8 hibernate的缓存机制 332 ...

    spring-data-ebean:用于Spring数据的Ebean实现,简化了创建基于Ebean的数据访问层的开发。超简单,超强大的ORM框架,OQL,SQL,ES多查询引擎,超越JPA,Hibernate,Mybatis

    批量插入相同类型的多个实体并返回生成的密钥 更新单个现有实体-一次更新实体的所有字段 获取多对一关系(部门公司) 获取一对多关系(公司部门) 更新实体一对多关系(公司部门)-添加两项,更新两项并删除一项-...

    java的轻量级orm工具包jdao.zip

    jdao有支持事务,支持批量插入数据等特性。同时jdao底层数据库操作提供接口,编程人员可以自己实现。 如果你觉得hibernate,ibatis等orm框架过于笨重,不烦试下jdao,它可以在团队开发中规范团队持久层代码,较少...

Global site tag (gtag.js) - Google Analytics