Hibernate 批量更新数据

原创 2015年11月18日 17:02:42

进行批量更新时,如果一下子把所有对象加载到session的缓存中,然后再进缓存中一一更新它们,显然是不可取的,为了解决这一问题,可以使用滚动的结果集

org.hibernate.ScrollableResults,Query的 scroll()方法返回一个ScrollableResults对象。以下是示例,该代码一开始利用ScrollableResults对象来家在所有的Customer

</pre><p><pre name="code" class="java">

对象


Session session = sessionFactory.openSession();

Transaction tx = session.beginTransaction();

ScrollableResults customers = session.createQuery("from Customer").scroll(ScrollMode.FORWARD_ONLY);

int count = 0;

while(customers.next()){

Customer customer = (Customer)customers.get(0);

customer.setAge(customer.getAge()+1);

if(++count%20==0){ //单次操作数目为20条

session.flush(); //清理缓存,执行批量更新20条记录的SQL update语句

session.clear();//清空缓存中的Customer对象

}

}

tx.commit();

session.close();

</pre>在以上代码中,Query的scroll()方法返回的ScrollableResults对象中实际上并不包括任何Customer对象,它仅包含用于在线定位数据库中CUSTOMERS记录的游标。</p><p>只有当程序遍历访问ScrollableResults对象中的特定元素时,它才会到数据库中加载相应的Customer对象。</p><p>为了保证以上程序顺利运行,需要遵守一下约束:</p><p>1.在Hibernate的配置文件中,应该把hibernate.jdbc.batch_size属性也设为20。</p><p>2.关闭第二级缓存,假如已经在配置文件中启用了第二级缓存,也可以通过以下方式在程序中hulve第二级缓存:</p><p><pre name="code" class="java">

ScrollableResults customers = session.createQuery("from Customer").setCacheMode(CacheMode.IGNORE).scroll(ScrollMode.FORWORD_ONLY);



相关文章推荐

hibernate处理批量更新和批量删除

9.4 批量处理数据 通常,在一个Session对象的缓存中只存放数量有限的持久化对象,等到Session对象处理事务完毕,还要关闭Session对象,从而及时释放Session的缓存占用的内存...
  • uohzoaix
  • uohzoaix
  • 2012年03月20日 11:13
  • 35240

在Hibernate应用中如何处理批量更新和批量删除

  Hibernate2.1不支持批量更新和删除,批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。以下程序直接通过Hibernate API批量更新CUSTOMERS表...

(4) hibernate增删查改+批量操作+类似Mybatis动态sql

一 简介 采用spring + hibernate + freemaker+ maven搭建起来的一个hibernate增删查改和 类似mybatis动态sql查询的一个案例 二 增删查改de...

四:Hibernate的批量操作

在Hibernate应用中,批量处理有两种方法,一种是通过Hibernate的缓存,另一种是绕过Hibernate,直接调用JDBC API来处理。 一:批量插入 (1)通过Hiberna...

Hibernate管理Session和批量操作

管理Session  Hibernate自身提供了三种管理Session对象的方法:   ① Session对象的生命周期与本地线程绑定   ② Session对象的生命周期与JTA事务绑定  ...

spring(基础21) hibernate处理批量更新和批量删除

一、需求背景 通常,在一个Session对象的缓存中只存放数量有限的持久化对象,等到Session对象处理事务完毕, 还要关闭Session对象,从而及时释放Session的缓存占用的内存。 批...

hibernate批量更新与jdbc批量更新

批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。以下程序直接通过Hibernate API批量更新CUSTOMERS表中年龄大于零的所有记录的AGE字段: ...

Hibernate 常用更新数据方法(机制)

Hibernate随记之 常用更新数据方法及区别
  • Luvjuin
  • Luvjuin
  • 2017年05月04日 13:29
  • 934

Hibernate的批量更新与删除(&&JDBC)

一,批量更新(两种方式) 1,使用Hibernate直接进行批量更新 (1)方式1:(Hibernate的HQL直接支持update/delete的批量更新语法) package com.anlw...
  • an_2016
  • an_2016
  • 2016年06月26日 12:00
  • 1707

hibernateHQl批量插入、删除、更新

1.批量插入(为了避免Hibernate的一级缓存导致缓存溢出,采取flush()定期手动将数据刷入数据库并且用clear将缓存数据清空 public void test() { for(int...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate 批量更新数据
举报原因:
原因补充:

(最多只允许输入30个字)