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
  • 37522

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

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

四:Hibernate的批量操作

在Hibernate应用中,批量处理有两种方法,一种是通过Hibernate的缓存,另一种是绕过Hibernate,直接调用JDBC API来处理。 一:批量插入 (1)通过Hiberna...
  • litianxiang_kaola
  • litianxiang_kaola
  • 2016年12月16日 23:35
  • 2118

Hibernate 数据的批量插入、更新和删除

Hibernate完全以面向对象的方式来操作数据库,当程序里以面向对象的方式操作持久化对象时,将被自动转换为对数据库的操作。例如调用Session的delete()方法来删除持久化对象,Hiberna...
  • zmx729618
  • zmx729618
  • 2016年05月18日 11:37
  • 4321

Hibernate批处理操作优化 (批量插入、更新与删除)

问题描述 我开发的网站加了个新功能:需要在线上处理表数据的批量合并和更新,昨天下午发布上线,执行该功能后,服务器的load突然增高,变化曲线异常,SA教育了我一番,让我尽快处理,将CPU...
  • zlllxl2002
  • zlllxl2002
  • 2015年06月23日 09:45
  • 1795

【Hibernate Note】Hibernate批量插入和批量更新

批量Insert Hibernate的Session都有一个一级缓存,所有要插入数据库的实例都会保存在这个缓存中,如果实例数目过多最后会抛出OutOfMemoryException。 如下代码...
  • mermaid_dora
  • mermaid_dora
  • 2012年11月28日 15:10
  • 4415

hibernate的update及JDBC数据库批量操作

Session.update()和Query.update()的区别最本质的区别是Session.update()更新的实体。而Query.update()更新的是执行SQL语句。 由此会带来一些问...
  • u011518120
  • u011518120
  • 2017年03月31日 15:19
  • 433

hibernate批量更新与jdbc批量更新

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

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

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

Hibernate 批量更新

hibernate处理批量更新和批量删除 分类: javaEE2012-03-20 11:13 6200人阅读 评论(0) 收藏 举报 hibernatesession数据库jdb...
  • legend_x
  • legend_x
  • 2013年10月28日 19:00
  • 609
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate 批量更新数据
举报原因:
原因补充:

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