`

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

阅读更多
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 最常见的主建配置

    - `&lt;many-to-one&gt;` 标签用于定义多对一的关联关系,`name` 属性表示Java类中的属性名称,`class` 属性指定了关联对象的类名,`outer-join` 属性表示是否启用外连接查询,`not-null` 和 `lazy` 分别表示是否允许为空...

    hibernate一对多例子

    - `not-found="ignore|exception"`属性表示当找不到关联时的行为,默认为抛出异常,也可以设置为忽略。 - `entity-name="EntityName"`属性可选,用于指定实体名称。 - `&lt;key&gt;`元素用于指定关联的外键。 - `outer-...

    Hibernate实战笔记

    - **迫切左外连接检索策略**:通过设置`lazy="false"`和`outer-join="true"`来实现。这种方式可以在一次查询中获取主对象及其关联对象,减少了查询次数,提高了性能。 #### 四、Hibernate配置与检索策略 - **类...

    Hibernate总结

    使用`&lt;set&gt;`元素来定义一对多关系,并通过`inverse="true"`属性来指定关联维护方,从而避免冗余SQL语句,提高性能。此外,可以在持久化类中添加实用方法,这些方法对Hibernate透明,方便应用程序直接调用。 **二、...

    Hibernate3性能优化方案

    &lt;many-to-one name=".." outer-join="true"/&gt; ``` - **SELECT抓取**:分别发送多个SELECT语句来获取对象及其关联对象的数据。这种方式增加了查询次数,但减少了每次查询的数据量。 ```xml &lt;set name=".." ...

    Hibernate关联关系hbm.xml中的相关属性

    5. `outer-join`: 控制是否使用外连接进行查询,可能的值有`auto`, `true`, `false`。 6. `update`, `insert`: 分别决定关联字段是否在UPDATE和INSERT语句中包含。设为`false`表示关联值由其他方式提供。 7. `...

    Nhibernate常见的三种配置方法

    &lt;property name="use_outer_join"&gt;true &lt;!-- 指定Model所在的程序集 --&gt; &lt;/session-factory&gt; &lt;/hibernate-configuration&gt; ``` 2. **读取配置**:使用`NHibernate.Cfg.Configuration`类的`Configure`方法来...

    Python数据分析实践:数据拼接-2-new.pdf

    默认情况下,`join`设置为'outer',这意味着即使索引不完全相同,也会将所有列合并,并用NaN填充缺失的值。如果设置`join='inner'`,则只会保留两个DataFrame共同的列。 在某些场景下,我们可能希望在拼接时忽略...

    SQL语法大全

    AbsolutePosition 不支持 不支持 可读写 可读写 ActiveConnection 可读写 可读写 可读写 可读写 BOF 只读 只读 只读 只读 Bookmark 不支持 不支持 可读写 可读写 CacheSize 可读写 可读写 可读写 可读写 ...

    hibernate学习笔记

    - **outer-join**:可选属性,默认为 "auto",表示是否使用外连接。 - **fetch**:可选属性,默认为 "select",表示加载策略。 - **persister**:可选属性,表示持久化器类。 - **collection-type**:可选属性,表示...

    hive操作指南

    - Hive支持多种类型的JOIN操作,包括Inner Join、Left Outer Join、Right Outer Join等。 - 示例:`SELECT e.name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.id;` #### 五、...

    Python数据分析应用:主键合并数据.pptx

    - `outer`:全连接,包含所有两边的行,对于没有匹配的行,结果中相应位置填充NaN,相当于SQL的FULL OUTER JOIN。 默认情况下,`merge()`函数会使用重叠的列索引来作为合并键。如果需要使用行索引(index)作为键,...

    Hibernate使用技巧汇总

    - `outer-join`: 是否使用外联接。 - **双向管理**: - 需要在两边都设置`inverse`和`lazy`。 - `cascade`只能设置为`insert-update`。 - **示例**: - `group1.getRoles().add(role1);` - `role1.getGroups()....

    mybatis 多对多

    outerJoin="true"/&gt; &lt;!-- 课程实体类映射 --&gt; &lt;resultMap id="courseResultMap" type="Course"&gt; &lt;!-- ... --&gt; &lt;collection property="students" javaType="ArrayList" ofType="Student" select=...

    主外键的配置

    `&lt;many-to-one&gt;`标签用于定义一对多的关系,`outer-join="ture"`, `not-null="true"`, 和 `lazy="false"`分别表示外键关联的查询方式、外键是否可为空以及延迟加载策略。 3. **双主键、无外键配置** 当实体类有两...

    Hive语法详解.docx (排版清晰,覆盖全面,含目录)

    - **RIGHT OUTER JOIN**:返回右表所有行和左表匹配的行。 - **FULL OUTER JOIN**:返回两个表所有行。 **4.4 groupby** - **分组统计**:`SELECT column1, COUNT(*) FROM table_name GROUP BY column1`。 **4.5 ...

    chapter12(SQL版).zip

    在本压缩包“chapter12(SQL版).zip”中,主要包含的是与SQL相关的练习题,由原创作者田超凡创作,并已申请版权。SQL(Structured Query Language,结构化查询语言)是用于管理关系数据库系统的核心语言,广泛应用...

    Nhibernate学习之起步篇

    &lt;property name="use_outer_join"&gt;true &lt;!-- 映射配置 --&gt; &lt;mapping assembly="NhibernateSample1"/&gt; &lt;/session-factory&gt; &lt;/hibernate-configuration&gt; ``` - 这个配置文件用于设置Nhibernate的工作环境,...

Global site tag (gtag.js) - Google Analytics