快速业务通道

加速你的Hibernate引擎(下) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
dynamic-update”结合使用以避免太多数据库更新开销。

4.10.4 级联删除

在范例11中,如果你想删除1个ElectricityDeal和它的100个DealCharge,Hibernate会对DealCharge做100次删除。

如果将“on-delete”修改为“cascade”,Hibernate不会执行DealCharge的删除动作;而是让数据库根据ON CASCADE DELETE约束自动删除那100个DealCharge。不过,需要让DBA开启ON CASCADE DELETE约束,大多数DBA不愿意这么做,因为他们想避免父对象的意外删除级联到它的依赖对象上。此外,还要注意,该特性会绕过Hibernate对版本数据(versioned data)的常用乐观锁策略。

加速你的Hibernate引擎(下)(7)

时间:2010-12-30 infoq 译:丁雪丰

4.10.5 增强的序列标识符生成器

范例11中使用Oracle的序列作为标识符生成器。假设我们保存100个ElectricityDeal,Hibernate会将下面的SQL语句执行100次来获取下一个可用的标识符:

select SEQ_ELECTRICITY_DEALS.NEXTVAL from dual; 

如果网络不是很快,那这无疑会降低效率。3.2.3及后续版本中增加了一个增强的生成器“SequenceStyleGenerator”,它带了两个优化器:hilo和pooled。尽管HRD的第5章“基础O/R映射” 讲到了这两个优化器,不过内容有限。两个优化器都使用了HiLo算法,该算法生成的标识符等于Hi值加上Lo值,其中Hi值代表组号,Lo值顺序且重复地从1迭代到最大组大小,组号在Lo值“转回到”1时加1。

假设组大小是5(可以用max_lo或increment_size参数来表示),下面是个例子:

组号取自数据库序列的下一个可用值,Hi值由Hibernate定义,是组号乘以increment_size参数值。

Hi值直接取自数据库序列的下一个可用值。数据库序列的增量应该设置为increment_size参数值。

hilo优化器

pooled优化器

直到内存组中的值耗尽后,两个优化器才会去访问数据库,上面的例子每5个标识值符访问一次数据库。使用hilo优化器时,你的序列不能再被其他应用程序使用,除非它们使用与Hibernate相同的逻辑。使用pooled优化器,在其他应用程序使用同一序列时则相当安全。

两个优化器都有一个问题,如果Hibernate崩溃,当前组内的一些标识符值就会丢失,然而大多数应用程序都不要求拥有连续的标识符值(如果你的数据库,比方说Oracle,缓存了序列值,当它崩溃时你也会丢失标识符值)。

如果在范例11中使用pooled优化器,新的id配置如下:

<id name="key" column="ID">    <generator class="org.hibernate.id.enhance.SequenceStyleGenerator">      <param name="sequence_name">SEQ_ELECTRICITY_DEALS</param>      <param name="initial_value">0</param>      <param name="increment_size">100</param>      <param name="optimizer ">pooled</param>    </generator> </id> 

5 总结

本文涵盖了大多数你在Hibernate应用程序调优时会觉得很有用的调优技巧,其中的大多数时间都在讨论那些行之有效却缺乏文档的调优主题,例如继承映射、二级缓存和增强的序列标识符生成器。

它还提到了一些Hibernate调优所必需的数据库知识。一些范例中包含了你可能遇到的问题的实际解决方案。

除此之外,值得一提的是Hibernate也可以和In-Memory Data Grid(IMDG)一起使用,例如Oracle的Coherance或GigaSpaces IMDG,这能让你的应用程序达到毫秒级别。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号