Hibernate 批量更新数据
来源:互联网 发布:文明5mac汉化补丁 编辑:程序博客网 时间:2024/05/21 21:41
进行批量更新时,如果一下子把所有对象加载到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);
0 0
- Hibernate批量更新数据
- Hibernate 批量更新数据
- hibernate批量删除和更新数据
- Hibernate批量更新策略
- Hibernate(2)批量更新
- 剖析Hibernate批量更新
- hibernate 的批量更新
- Hibernate 批量更新
- Hibernate 数据的批量插入、更新和删除
- Hibernate 数据的批量插入、更新和删除
- Hibernate 数据的批量插入、更新和删除
- Hibernate 数据的批量插入、更新和删除
- Hibernate 数据的批量插入、更新和删除
- 批量更新数据之hibernate或者jdbc执行效果对比
- Hibernate 数据的批量插入、更新和删除
- Hibernate 数据的批量插入、更新和删除
- hibernate批量更新与jdbc批量更新
- 批量更新数据
- 混淆中再混淆
- 计算机图形学的一些基本问题
- log4j.properties 详解与配置步骤
- android studio 使用.9图片
- iOS 开发之全局特性设置
- Hibernate 批量更新数据
- WPF入门实例
- 博客已经搬家,谢谢大家的支持
- VB 字符串处理函数集
- Innodb锁机制:Next-Key Lock 浅谈
- java中的运算符的分类及运用
- JavaScript DOM编程艺术—显示“缩略语列表”
- linux下操作Mysql
- Xcode7以后断点调试会经常出现要调试的对象为nil,但是当你打印时值是存在的,解决办法