{Hibernate} outer-join属性并不简单
2008-02-23 10:15:10来源:互联网 阅读 ()
Hibernate-2.1.7c
JBuilderX
MS SQLSERVER 2K
[正文]
Lazy属性做为Hibernate的提升性能的一个重要参数...想必已被大家所熟知...虽然Hibernate2.1.*里面还不支持对于property的延迟加载...但是正确并且灵活的设置XXX-to-many中的Lazy属性, 可以给程序性能带来很大提高
请先看看下面这段配置
<set name="moderators" lazy="true" inverse="false" outer-join="true" cascade="all" order-by="creationDate asc">
<key column="forumid"/>
<one-to-many class="ModeratorPO"/>
</set>
正如我一厢情愿的,此段代码在我的程序中使用了很长时间,我也一度自以为是的以为它为我实现了moderators集合的延迟加载,可是当我仔细得阅读了Hibernate为我的getObject()方法输出得SQL时...我发现我取得的是一个很大的SQL列表,竟有十余条之多
难道lazy设置失效了么?反复的调试,查看文档,google........
最终在分析输出的SQL后发现了“罪魁祸首”:outer-join
其实原因很简单,outer-join即外连接抓取,Hibernate将分开的N条SQL语句通过table_nameA left join table_nameB on(具体语法由实际的DBMS决定)来合并成一条SQL提交给数据库,并返回PO对象以及Collection的PO列表,这本也是Hibernate提升性能减少数据库访问的一个优化措施..但是在获取Collection时,采用outer-join就导致了collection与PO对象本身同时提交到查询,也就变相的失去了延迟加载的效果
经多次测试 当outer-join=true时,你的lazy属性无论设置为任何值,Collection都会初始加载(one-to-one没有lazy 因此不必考虑^_^)
请大家谨慎设置outer-join=true
上一篇: Java性能(来源:java编程思想)
下一篇: buildfile实例
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Java开发源缓存系统的介绍
下一篇:谈谈J2SE中的序列化
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash