欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Hibernate中outer-join與lazy關(guān)鍵字的使用--mofour live
Hibernate中outer-join與lazy關(guān)鍵字的使用
mo412 @ 7.28 2005 / 20:55

 
Hibernate中outer-join與lazy關(guān)鍵字的使用
<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>

 

近來(lái)一直困惑與outer-join關(guān)鍵字,經(jīng)過(guò)多次測試之后,現總結如下:


1、outer-join關(guān)鍵字(many-to-one的情況)


outer-join關(guān)鍵字有3個(gè)值,分別是true,false,auto,默認是auto。
true: 表示使用外連接抓取關(guān)聯(lián)的內容,這里的意思是當使用load(OrderLineItem.class,“id“)時(shí),Hibernate只生成一條SQL語(yǔ)句將OrderLineItem與他的父親Order全部初始化。

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

false:表示不使用外連接抓取關(guān)聯(lián)的內容,當load(OrderLineItem.class,“id“)時(shí),Hibernate生成兩條SQL語(yǔ)句,一條查詢(xún)OrderLineItem表,另一條查詢(xún)Order表。這樣的好處是可以設置延遲加載,此處要將Order類(lèi)設置為lazy=true。

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

auto:具體是ture還是false看hibernate.cfg.xml中的配置


注意:如果使用HQL查詢(xún)OrderLineItem,如 from OrderLineItem o where o.id='id',總是不使用外部抓取,及outer-join失效。


2、outer-join(集合)

由于集合可以設置lazy=“true“,所以lazy與outer-join不能同時(shí)為true,當lazy=“true“時(shí),outer-join將一直是false,如果lazy=“false“,則outer-join用法與1同

3、HQL語(yǔ)句會(huì )將POJO配置文件中的關(guān)聯(lián)一并查詢(xún),即使在HQL語(yǔ)句中沒(méi)有明確join。

4、In HQL, the “fetch join” clause can be used for per-query specific outer join fetching. One important thing many people miss there, is that HQL queries will ignore the outer-join attribute you specified in your mapping. This makes it possible to configure the default loading behaviour of session.load() and session.get() and of objects loaded by navigating relationship. So if you specify

and then do
MyObject obj = session.createQuery("from MyObject").uniqueResult();
obj.getMySet().iterator().next();

you will still have an additional query and no outer-join. So you must explicily request the outer-join fetching:

MyObject obj = session.createQuery(
    "from MyObject mo left join fetch mo.mySet").uniqueResult();
obj.getMySet().iterator().next();

Another important thing to know is that you can only fetch one collection reference in a query. That means you can just use one fetch join. You can however fetch “one” references in addition, as this sample from the Hibernate Docs demonstrates:

from eg.Cat as cat
    inner join fetch cat.mate
    left join fetch cat.kittens

We have once considered lifting this limitation, but then decided against it, because using more than one fetch-join would be a bad idea generally: The generated ResultSet becomes huge and is a major performance loss.

So alltogether the “fetch join” clause is an important instrument Hibernate users should learn how to leverage, as it allows tuning the fetch behaviour of a certain use case.

5、join fetch 與 join 的區別

如果HQL使用了連接,但是沒(méi)有使用fetch關(guān)鍵字,則生成的SQL語(yǔ)句雖然有連接,但是并沒(méi)有取連接表的數據,還是需要單獨的sql取數據,也就是 select a,b,d...中沒(méi)有連接表的字段

6、如果集合被聲明為lazy=true,在HQL中如果顯式的使用 join fetch 則延遲加載失效。

Powered by:
 
Copyright © rainsoft

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Hibernate中,left join、inner join以及l(fā)eft join fe...
Hibernate的檢索策略小結
hibernate fetch outer-join constrained
Join用法,HQL的方法,Hibernate中的fetch
Hibernate many
Hibernate: Criteria vs. HQL
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久