关闭

outer-join属性并不简单 ,请大家谨慎设置outer-join=true

标签: hibernatesql数据库jointableclass
564人阅读 评论(0) 收藏 举报
分类:

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 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:109707次
    • 积分:1427
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:116篇
    • 译文:0篇
    • 评论:18条
    最新评论