首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate批量安插、更新、删除

2012-08-29 
Hibernate批量插入、更新、删除?最近一个项目中需要对数据进行统计,然后插入到库中,数据大概几万,一条条搞速

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;}

热点排行