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

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

ID:40747127

大小:30.50 KB

页数:7页

时间:2019-08-07

hibernate处理批量更新和批量删除_第1页
hibernate处理批量更新和批量删除_第2页
hibernate处理批量更新和批量删除_第3页
hibernate处理批量更新和批量删除_第4页
hibernate处理批量更新和批量删除_第5页
资源描述:

《hibernate处理批量更新和批量删除》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、9.4批量处理数据通常,在一个Session对象的缓存中只存放数量有限的持久化对象,等到Session对象处理事务完毕,还要关闭Session对象,从而及时释放Session的缓存占用的内存。批量处理数据是指在一个事务中处理大量数据。以下程序在一个事务中批量更新CUSTOMERS表中年龄大于零的所有记录的AGE字段:Transactiontx=session.beginTransaction();Iteratorcustomers=session.createQuery("fromCustomerc

2、wherec.age>0").list().iterator();while(customers.hasNext()){Customercustomer=(Customer)customers.next();customer.setAge(customer.getAge()+1);}tx.commit();session.close();如果CUSTOMERS表中有1万条年龄大于零的记录,那么Hibernate会一下子加载1万个Customer对象到内存。当执行tx.commit()方法时,会清理缓

3、存,Hibernate执行1万条更新CUSTOMERS表的update语句:updateCUSTOMERSsetAGE=?….whereID=i;updateCUSTOMERSsetAGE=?….whereID=j;……updateCUSTOMERSsetAGE=?….whereID=k;以上批量更新方式有两个缺点:占用大量内存,必须把1万个Customer对象先加载到内存,然后一一更新它们。执行的update语句的数目太多,每个update语句只能更新一个Customer对象,必须通过1万条upd

4、ate语句才能更新1万个Customer对象,频繁地访问数据库,会大大降低应用的性能。一般说来,应该尽可能避免在应用层进行批量操作,而应该在数据库层直接进行批量操作,例如直接在数据库中执行用于批量更新或删除的SQL语句,如果批量操作的逻辑比较复杂,则可以通过直接在数据库中运行的存储过程来完成批量操作。并不是所有的数据库系统都支持存储过程。例如目前的MySQL就不支持存储过程,因此不能通过存储过程来进行批量更新或批量删除。当然,在应用层也可以进行批量操作,主要有以下方式:(1)通过Session来进行

5、批量操作。(2)通过StatelessSession来进行批量操作。(3)通过HQL来进行批量操作。(4)直接通过JDBCAPI来进行批量操作。9.4.1通过Session来进行批量操作Session的save()以及update()方法都会把处理的对象存放在自己的缓存中。如果通过一个Session对象来处理大量持久化对象,应该及时从缓存中清空已经处理完毕并且不会再访问的对象。具体的做法是在处理完一个对象或小批量对象后,立刻调用flush()方法清理缓存,然后再调用clear()方法清空缓存。通过S

6、ession来进行批量操作会受到以下约束:(1)需要在Hibernate的配置文件中设置JDBC单次批量处理的数目,合理的取值通常为10到50之间,例如:hibernate.jdbc.batch_size=20在按照本节介绍的方法进行批量操作时,应该保证每次向数据库发送的批量SQL语句数目与这个batch_size属性一致。(2)如果对象采用"identity"标识符生成器,则Hibernate无法在JDBC层进行批量插入操作。(3)进行批量操作时,建议关闭Hibernate的第二级缓存。本书的姊妹

7、篇《精通Hibernate:高级篇》对第二级缓存做了详细介绍。Session的缓存为Hibernate的第一级缓存,通常它是事务范围内的缓存,也就是说,每个事务都有单独的第一级缓存。SessionFactory的外置缓存为Hibernate的第二级缓存,它是应用范围内的缓存,也就是说,所有事务都共享同一个第二级缓存。在任何情况下,Hibernate的第一级缓存总是可用的。而默认情况下,Hibernate的第二级缓存是关闭的,此外也可以在Hibernate的配置文件中通过如下方式显式关闭第二级缓存:h

8、ibernate.cache.use_second_level_cache=false1.批量插入数据以下代码一共向数据库中插入十万条CUSTOMERS记录,单次批量插入20条CUSTOMERS记录:Sessionsession=sessionFactory.openSession();Transactiontx=session.beginTransaction();for(inti=0;i<100000;i++){Customercustomer=newCustom

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。