`

[转]Hibernate中的outer-join(二):fetch

阅读更多
    这篇文章挺好的.


Hibernate中的outer-join(二):fetch

 

<link media="all" href="/tf-resource/css/outputText/tf-outputText.css" type="text/css" rel="stylesheet">在hibernate3里,提供了一个新的属性:fetch。可以用fetch来代替outer-join。

 
Hibernate3的one-to-one/many-to-one属性里增加了一个fetch属性。

fetch属性可以为:select或者join。
当设置为join的时候,采用外联结方式查询,具体参考 上篇文章。


另外hibernate3里可以在HQL里明确指定fetch:
"From Student as s JOIN FETCH s.classz"
表示查询Student的时候,采用外联结方式查询classz表。

在这里补充说明一下,为什么有时需要外联结查询。
举例说明:
有2个表User 和 Contact两个对象分别对应数据库中 用户 和 联系地址 两张表。User 和 Contact是一对一关联。如果不采用外联结查询的话,问题就出现了,如果
   1. From User where rownum < 100,
这时就会:
先执行:
   select * from user

然后针对每个user执行
   select * from contact where user_id=?

也就是说,用一条SQL语句就能查询出来的功能,采用hibernate HQL查询,却需要请求数据库 1+n 次(这个例子执行了101次数据库查询)。

为什么会出现这种情况呢?
这是由于one-to-one的固定机制造成的。如果不采用外联结查询方式,查询出User数据的时候,这时并不能从User数据知道Contact数据存不存在,必须进行数据库查询。

为了减少这种不必要的数据库查询,可以设置查询时采用外联结方式。
但要注意一点的是,采用外联结方式虽然可以减少数据库查询次数,但如果采用cache或者二级cache,因为外联结的查询条件的不确定性,会大大降低缓存/二级缓存的效果。

所以具体怎么定,还要根据业务来定。
分享到:
评论
1 楼 sunjun 2009-02-18  
引用
hibernate3里,提供了一个新的属性:fetch。可以用fetch来代替outer-join。

请问一下,你这里的意思是不是说Hibernate3里面现在是用fetch来设置外联结方式查询,而不是使用以前的outer-join,我碰到一个问题http://www.iteye.com/problems/11520,能不能帮忙解决一下,谢谢!!!

相关推荐

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

    Hibernate教程

    4.4.2. 外连接抓取(Outer Join Fetching) 4.4.3. 二进制流 (Binary Streams) 4.4.4. 二级缓存与查询缓存 4.4.5. 查询语言中的替换 4.4.6. Hibernate的统计(statistics)机制 4.5. 日志 4.6. 实现NamingStrategy...

    hibernate3.2中文文档(chm格式)

    3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy...

    Hibernate+中文文档

    3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy...

    Hibernate中文详细学习文档

    3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy...

    HibernateAPI中文版.chm

    3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy...

    Hibernate 中文 html 帮助文档

    3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy...

    最全Hibernate 参考文档

    3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy...

    hibernate3.04中文文档.chm

    4.4.2. 外连接抓取(Outer Join Fetching) 4.4.3. 二进制流 (Binary Streams) 4.4.4. 二级缓存与查询缓存 4.4.5. 查询语言中的替换 4.4.6. Hibernate的统计(statistics)机制 4.5. 日志 4.6. 实现...

    hibernate 体系结构与配置 参考文档(html)

    外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7...

    Hibernate3+中文参考文档

    3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy...

    Hibernate Reference Documentation3.1

    3.4.2. Outer Join Fetching 3.4.3. Binary Streams 3.4.4. Second-level and query cache 3.4.5. Query Language Substitution 3.4.6. Hibernate statistics 3.5. Logging 3.6. Implementing a NamingStrategy 3.7....

    hibernate 框架详解

    外连接抓取(Outer Join Fetching) 4.4.3. 二进制流 (Binary Streams) 4.4.4. 二级缓存与查询缓存 4.4.5. 查询语言中的替换 4.4.6. Hibernate的统计(statistics)机制 4.5. 日志 4.6. 实现NamingStrategy ...

    Hibernate参考文档

    3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy...

    NHibernate中文帮组文档(2008.11月更新)

    3.5.2 外连接抓取(Outer Join Fetching) 3.5.3. 查询缓存 3.5.4. 查询语言中的替换 3.6. 日志 3.7. 实现NamingStrategy 3.8. XML配置文件 4. 持久化类(Persistent Classes) 4.1. 一个简单的POCO例子 4.1.1. 为持久...

    hibernate3.6 文档(pdf 格式)

    3.4.2. Outer Join Fetching ................................................................................ 43 3.4.3. Binary Streams ......................................................................

    NHibernate参考文档 2.0.0 chm

    3.5.2 外连接抓取(Outer Join Fetching) 3.5.3. 查询缓存 3.5.4. 查询语言中的替换 3.6. 日志 3.7. 实现NamingStrategy 3.8. XML配置文件 4. 持久化类(Persistent Classes) 4.1. 一个简单的POCO例子 4.1.1. 为持久...

Global site tag (gtag.js) - Google Analytics