- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在Hibernate应用中如何处理批量更新和批量删除
在Hibernate应用中如何处理批量更新和批量删除
在Hibernate应用中如何处理批量更新和批量删除?
2010-07-14 16:17
在Hibernate应用中如何处理批量更新和批量删除?
选自精通Hibernate:Java对象持久化技术详解 作者:孙卫琴 来源:
如果转载,请标明出处,谢谢
9.4 批量处理数据
通常,在一个Session对象的缓存中只存放数量有限的持久化对象,等到Session对象处理事务完毕,还要关闭Session对象,从而及时释放Session的缓存占用的内存。
批量处理数据是指在一个事务中处理大量数据。以下程序在一个事务中批量更新CUSTOMERS表中年龄大于零的所有记录的AGE字段:
Transaction tx = session.beginTransaction();
Iterator customers=
session.createQuery(from Customer c where c.age0).list().iterator();
while(customers.hasNext()){
Customer customer=(Customer)customers.next();
customer.setAge(customer.getAge()+1);
}
mit();
session.close();
如果CUSTOMERS表中有1万条年龄大于零的记录,那么Hibernate会一下子加载1万个Customer对象到内存。当执行mit()方法时,会清理缓存,Hibernate执行1万条更新CUSTOMERS表的update语句:
update CUSTOMERS set AGE=? …. where ID=i;
update CUSTOMERS set AGE=? …. where ID=j;
……
update CUSTOMERS set AGE=? …. where ID=k;
以上批量更新方式有两个缺点:
占用大量内存,必须把1万个Customer对象先加载到内存,然后一一更新它们。
执行的update语句的数目太多,每个update语句只能更新一个Customer对象,必须通过1万条update语句才能更新1万个Customer对象,频繁地访问数据库,会大大降低应用的性能。
一般说来,应该尽可能避免在应用层进行批量操作,而应该在数据库层直接进行批量操作,例如直接在数据库中执行用于批量更新或删除的SQL语句,如果批量操作的逻辑比较复杂,则可以通过直接在数据库中运行的存储过程来完成批量操作。
并不是所有的数据库系统都支持存储过程。例如目前的MySQL就不支持存储过程,因此不能通过存储过程来进行批量更新或批量删除。
当然,在应用层也可以进行批量操作,主要有以下方式:
(1)通过Session来进行批量操作。
(2)通过StatelessSession来进行批量操作。
(3)通过HQL来进行批量操作。
(4)直接通过JDBC API来进行批量操作。
9.4.1 通过Session来进行批量操作
Session的save()以及update()方法都会把处理的对象存放在自己的缓存中。如果通过一个Session对象来处理大量持久化对象,应该及时从缓存中清空已经处理完毕并且不会再访问的对象。具体的做法是在处理完一个对象或小批量对象后,立刻调用flush()方法清理缓存,然后再调用clear()方法清空缓存。
通过Session来进行批量操作会受到以下约束:
(1)需要在Hibernate的配置文件中设置JDBC单次批量处理的数目,合理的取值通常为10到50之间,例如:
hibernate.jdbc.batch_size=20
在按照本节介绍的方法进行批量操作时,应该保证每次向数据库发送的批量SQL语句数目与这个batch_size属性一致。
(2)如果对象采用identity标识符生成器,则Hibernate无法在JDBC层进行批量插入操作。
(3)进行批量操作时,建议关闭Hibernate的第二级缓存。本书的姊妹篇《精通Hibernate:高级篇》对第二级缓存做了详细介绍。Session的缓存为Hibernate的第一级缓存,通常它是事务范围内的缓存,也就是说,每个事务都有单独的第一级缓存。SessionFactory的外置缓存为Hibernate的第二级缓存,它是应用范围内的缓存,也就是说,所有事务都共享同一个第二级缓存。在任何情况下,Hibernate的第一级缓存总是可用的。而默认情况下,Hibernate的第二级缓存是关闭的,此外也可以在Hibernate的配置文件中通过如下方式显式关闭第二级缓存:
hibernate.cache.use_second_leve
您可能关注的文档
- 各种美容小窍门,值得收藏!.doc
- 各种逻辑推理小故事大全3.doc
- 合格销售员所具备1.doc
- 含答案6.1脑经急转弯.doc
- 员公关系管理.doc
- 品牌管理的魅力--中小企业发展的利器.doc
- 品牌药品营销中市场货量的科学化管理.doc
- 商品砼在生产和浇筑过程中的常见问题.doc
- 啤酒企业怎样高效开拓市场.doc
- 喜欢做菜的进来学学.doc
- 2026年浙江大学医学院附属妇产科医院公开招聘人员118人历年真题汇编及答案解析(夺冠).docx
- 2026年温州泰顺县教育系统提前招聘高校优秀毕业生15人参考题库及答案解析(夺冠).docx
- 2026年浙江大学医学院附属口腔医院公开招聘人员43人历年真题汇编带答案解析.docx
- 2026年浙江大学医学院附属邵逸夫医院招聘派遣制岗位135人参考题库及答案解析(夺冠).docx
- 房地产项目营销推广方案及预算.docx
- 2026年梅河口市教育系统面向吉林师范大学等院校招聘教师(17人)参考题库附答案解析.docx
- 东港灌区续建配套及节水改造工程施工组织设计.pdf
- 2026年河北衡水学院引进高层次人才历年真题汇编及答案解析(夺冠).docx
- 2026年朝阳市教育局直属学校赴高校公开招聘教师14人(第一批次)参考题库及答案解析(夺冠).docx
- 2026年当阳市“招才兴业”事业单位高层次和急需紧缺人才引进80人备考题库及答案解析(夺冠).docx
最近下载
- 2000 IKDC评分表及使用细则.pdf VIP
- DB54T 0035-2009 无公害食品 春青稞生产技术规程.docx VIP
- DB23T 3469-2023 高寒地区公路工程振动拌和水泥混凝土施工技术规程.pdf VIP
- 国开电大传感器与测试技术实验报告.doc VIP
- 交警队的合同(2篇).docx VIP
- X52K型立式铣床电气控制系统的PLC改造设计课程设计.pdf VIP
- 水稻田土壤重金属污染与修复策略.pptx VIP
- 汇川(INOVANCE)MD380E变频器说明书.pdf
- 大学美育(同济大学)学习通测试及答案.pdf VIP
- 详细版PCL-5创伤后应激障碍筛查量表.docx VIP
原创力文档


文档评论(0)