`

Hibernate中outer-join与lazy关键字的使用

阅读更多
<hibernate-mapping>
    <class  name="com.meagle.bo.Order"    table="Orders"    dynamic-update="false"   dynamic-insert="false" >
        <id  name="id"  column="Order_ID"   type="int"   unsaved-value="0">
            <generator class="native">
            </generator>
        </id>
        <set   name="orderLineItems"    table="OrderLineItem"    lazy="true"    inverse="true"   cascade="save-update"     sort="unsorted">
              <key   column="Order_ID" ></key>
              <one-to-many   class="com.meagle.bo.OrderLineItem" />
        </set>
        <property   name="userName"  type="string"  update="true"  insert="true"  access="property"
            column="UserName"
            not-null="true"
            unique="false"  />

        <property      name="total"    type="double"    update="true"   insert="true"  access="property"   column="Total"
            not-null="false"
            unique="false"
        />
    </class>

</hibernate-mapping>

<hibernate-mapping>
    <class    name="com.meagle.bo.OrderLineItem"    table="OrderLineItem"    dynamic-update="false"      dynamic-insert="false" >
        <id   name="id"   column="OrderLineItem_ID"   type="int"   unsaved-value="0">
            <generator class="native">
            </generator>
        </id>
        <many-to-one   name="order"   class="com.meagle.bo.Order"   cascade="none"  outer-join="auto"   update="true"
            insert="true"
            access="property"
            column="Order_ID" />

        <property  name="description"  type="string"  update="true"  insert="true"  access="property"  column="Description"      not-null="false"   unique="false" />

        <property  name="lineItemPrice"    type="double"    update="true"     insert="true"     access="property"
            column="LineItemPrice"
            not-null="false"
            unique="false"
        />
    </class>

</hibernate-mapping>



近来一直困惑与outer-join关键字,经过多次测试之后,现总结如下:


1、outer-join关键字(many-to-one的情况)


outer-join关键字有3个值,分别是true,false,auto,默认是auto。
true: 表示使用外连接抓取关联的内容,这里的意思是当使用load(OrderLineItem.class,“id“)时,Hibernate只生成一条SQL语句将OrderLineItem与他的父亲Order全部初始化。

select * from OrderLineItem o left join Order p on o.OrderId=p.OrderId  where o.OrderLineItem_Id=?

false:表示不使用外连接抓取关联的内容,当load(OrderLineItem.class,“id“)时,Hibernate生成两条SQL语句,一条查询OrderLineItem表,另一条查询Order表。这样的好处是可以设置延迟加载,此处要将Order类设置为lazy=true。

select * from OrderLineItem o where o.OrderLineItem_Id=?
select * from Order p where p.OrderId=?

auto:具体是ture还是false看hibernate.cfg.xml中的配置


注意:如果使用HQL查询OrderLineItem,如 from OrderLineItem o where o.id='id',总是不使用外部抓取,及outer-join失效。


2、outer-join(集合)

由于集合可以设置lazy=“true“,所以lazy与outer-join不能同时为true,当lazy=“true“时,outer-join将一直是false,如果lazy=“false“,则outer-join用法与1同

3、HQL语句会将POJO配置文件中的关联一并查询,即使在HQL语句中没有明确join。
分享到:
评论

相关推荐

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

    19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...

    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

    19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...

    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习惯的关系数据库持久化

    19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...

    最全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 体系结构与配置 参考文档(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.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教程

    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+中文参考文档

    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 教程

    外连接抓取(Outer Join Fetching ) 3.5.3. 二进制流 3.5.4. 自定义CacheProvider 3.5.5. 事务策略配置 3.5.6. 绑定SessionFactory到JNDI 3.5.7. 查询语言替换 3.6. Logging 3.7. 实现...

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

    hibernate

    外连接抓取(Outer Join Fetching ) 3.5.3. 二进制流 3.5.4. 自定义CacheProvider 3.5.5. 事务策略配置 3.5.6. 绑定SessionFactory到JNDI 3.5.7. 查询语言替换 3.6. Logging 3.7. 实现...

    hibernate3.6 文档(pdf 格式)

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

    Java学习笔记-个人整理的

    {12.12}inner join与outer join比较}{172}{section.12.12} {12.12.1}非等值连接}{174}{subsection.12.12.1} {12.13}DML语句}{175}{section.12.13} {12.13.1}insert}{175}{subsection.12.13.1} {12.13.2}create}...

Global site tag (gtag.js) - Google Analytics