`

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 
分享到:
评论

相关推荐

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

    2022/3/14 4.8 数据拼接-2 数据拼接经常用于将不同的dataframe (series)拼接成一个dataframe ,可以根据某个轴向进行拼接。...当两个表索引不完全一样时,可以使用join 参数选择是内连接inner还是外连接outer。在内

    SQL语法大全

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

    pandas的连接函数concat()函数的具体使用方法

    pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True) 参数含义 objs:Series,DataFrame或Panel对象的序列或...

    微软内部资料-SQL性能优化5

    Having useful indexes speeds up finding individual rows in a table, as well as finding the matching rows needed to join two tables. What You Will Learn After completing this lesson, you will be able ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    说明:Oracle中需要创建用户一定是要具有dba(数据库管理员)权限的用户才能创建,而且创建的新用户不具备任何权限,连登录都不可以。 用法:create user 新用户名 identified by 密码 例子: 2. 修改密码 说明:...

    mysql数据库的基本操作语法

    通常我们并不对视图的数据做修改操作,因为视图是一张虚拟的表,它并不存储实际数据。如果想让视图不被修改,可以用with check option来完成限制。 create or replace view view_temp as select * from temp with ...

    一个用Go编写的SQL格式化程序

    sqlfmt Description The sqlfmt formats PostgreSQL statements in .go files into a consistent style. Example ...from xxx as xxx join xxx on xxx = xxx join xxx as xxx on xxx = xxx left outer joi

    hibernate.properties

    ## set the maximum depth of the outer join fetch tree hibernate.max_fetch_depth 1 ## set the default batch size for batch fetching #hibernate.default_batch_fetch_size 8 ## rollback generated ...

    2008年6月大学英语六级A卷真题

    A) may invite trouble B) may not come true C) will fool the public D) do more harm than good 3. Professor Bruce Lahn of the University of Chicago predicts that____. A) humans won’t have to donate ...

    DM8_SQL语言使用手册.pdf

    3.3.2 设置当前模式语句 ..........................................................................................65 3.3.3 模式删除语句 ....................................................................

Global site tag (gtag.js) - Google Analytics