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

转载 2007年09月11日 18:52:00

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 

深入理解Hibernate表与表之间的关联,搞懂cascade、inverse、lazy等属性,和注解版Hibernate实例

1.搞定Hibernate表与表之间的关联,搞懂cascade、inverse、lazy等属性
  • he90227
  • he90227
  • 2014-07-28 13:34:34
  • 6609

spring data jpa将@ManyToOne查询从cross join变成left outer join

在多对一关系中,当多端的表作为主表,并且需要连接一端的表时,默认的连接方式为cross join。在某些业务场景下,查询的数据是不完整的。因为cross join会过滤掉关联字段为null的行数据。所...
  • miranaibuai
  • miranaibuai
  • 2017-08-28 19:45:06
  • 855

使用spring data jpa 心得

JpaSpecificationExecutor.findAll(new Specification(){ public Predicate toPredicate(Root root, Cr...
  • superdog007
  • superdog007
  • 2014-05-14 22:29:01
  • 3458

FreeCAD:Linux 下的 3D 建模和设计软件

FreeCAD 是一个基于 OpenCasCade 的跨平台机械工程和产品设计工具。作为参数化 3D 建模工具,它可以与 PLM、CAx、CAE、MCAD 和 CAD 协同工作,并且可以使用大量高级扩...
  • F8qG7f9YD02Pe
  • F8qG7f9YD02Pe
  • 2017-12-20 00:00:00
  • 181

OpenCascade的显示模块中visual3d层实现

Normal 0 7.8 磅 0 2 false false false Microsof...
  • astrosky
  • astrosky
  • 2009-07-07 22:59:00
  • 1944

{Hibernate} outer-join属性并不简单

[环境]hibernate-2.1.7cJBuilderXMS SQLSERVER 2K[正文]Lazy属性做为Hibernate的提升性能的一个重要参数...想必已被大家所熟知...虽然Hibern...
  • bluemeteor
  • bluemeteor
  • 2005-01-27 15:32:00
  • 941

精通Hibernate——Hibernate的检索策略

在Session的缓存中存放的是互相关联的对象图。在默认情况下,当Hibernate从数据库中加载Customer对象时,会同时加载所有关联的Order对象,下面我们以Order和Customer为例...
  • fuyuwei2015
  • fuyuwei2015
  • 2015-09-02 09:43:56
  • 535

人脸3D重建:Cascaded Regressor

《Cascaded Regressor based 3D Face Reconstruction from a Single Arbitrary View Image》论文解读本文来自四川大学,论文原...
  • tinyzhao
  • tinyzhao
  • 2016-12-14 15:58:51
  • 3189

[Unity3D]-螺旋线

之前,在做人物技能设计的时候,遇见一个做螺旋运动的技能,特效师,K帧K个半死,最终还是没有完美的弄出一个螺旋运动.这个时候,纯手工制作就没有用工程学的方法制作那般完美了. 在一个平面上做螺旋运动,螺...
  • u011397120
  • u011397120
  • 2017-03-14 01:09:26
  • 513

Hibernate之outer-join属性并不简单

 Lazy属性做为Hibernate的提升性能的一个重要参数...想必已被大家所熟知...虽然Hibernate2.1.*里面还不支持对于property的延迟加载...但是正确并且灵活的设置XXX-...
  • daryl715
  • daryl715
  • 2007-08-22 23:21:00
  • 974
收藏助手
不良信息举报
您举报文章:outer-join属性并不简单 ,请大家谨慎设置outer-join=true
举报原因:
原因补充:

(最多只允许输入30个字)