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 many-to-one 一些属性说明(outer-join)

many-to-one:描述多对一的一种数据模型,它指定many一方是不能独立存在的,我个人认为many-to-one是NHB中保证数据有效性的最有用的一种映射,通过使用many-to-one能有效的...

outer-join的简单学习

在hibernate的对象关联中慎用outer-join属性值(many-to-many的集元素属性错误备忘) outer-join属性在hibernate表示迫切左外连接检索。 在xdoclet生成...

SQL:OUTER JOIN用法详解

SQL--JOIN用法 外联接。外联接可以是左向外联接、右向外联接或完整外部联接。  在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定: LEFT JOIN 或 L...

oracle中右表有过滤条件的left outer join

oracle中left outer join就是以左表作为基表来进行连接操作,连接的结果中一定会涵盖基表中所有的列,即使有某些列与右表找不到匹配关系。如下分别是city表和stds表中的数据截图: ...

Index hint ignored for driving table of Outer Join[ID 316518.1]

Index hint ignored for driving table of Outer Join[ID 316518.1]     Index hint ignored fo...
  • aicon
  • aicon
  • 2012年02月23日 08:55
  • 363

Hive0.14在left outer join多级连接中,执行计划生成BUG记录

前言:         这几天遇到一个很诡异的问题,一个三级left outer join的句子,在hive0.9和0.14上的执行结果会不一样。         而且在0.14上通过转换...

小谈数据库的Left Outer Join和CTE

这篇文章介绍了数据库中LEFT OUTER JOIN的实际项目中的应用。

使用FULL OUTER JOIN拼接多表数据

今天帮用户修改一个报表,里边设计到出库和入库的操作,要将每个产品每天的出入口信息列出来。   可能存在这样的情况:   1.   产品在出库表中存在数据但是入库表中没有数据 2.   产品入...

left outer join 改写标量子查询

统计每个部门员工总工资。 原SQL: select d.department_id, d.department_name, nvl((select sum(e.salar...

第一次做项目碰到的一个坑之left outer join 左外连接

这段时间在做一个叫“香港自由行”的项目,是一个旅游网站。我负责的模块是景点页面,主要是星级评分、评论、查附件5个景点。功能很简单,做的时候也没啥大问题。 但是,某天,在我提交确认无误提交后,发现另外一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:outer-join属性并不简单 ,请大家谨慎设置outer-join=true
举报原因:
原因补充:

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