<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    寫程序,做產(chǎn)品,過日子

    成功其實(shí)很簡單,就是強(qiáng)迫自己堅(jiān)持下去

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      69 Posts :: 1 Stories :: 92 Comments :: 0 Trackbacks

    一直以為,在Hiberenate中用多對(duì)一關(guān)系表達(dá)外鍵,并設(shè)置為延遲加載時(shí),Hibernate不會(huì)在查主表時(shí)去查引用表。今天的測試卻發(fā)現(xiàn)不是這么回事。

    我定義了一個(gè)Topic類,其中有一個(gè)外鍵引用Company類:

    ?

    < many-to-one? name ="company" ?class ="Company" ?lazy ="no-proxy" >
    < column? name ="COMPANY" ?length ="32" ? />
    </ many-to-one >

    ?

    測試HQL如下:select id, company from Topic

    而我期望的SQL應(yīng)當(dāng)是這樣:select boid, company from DT_TOPIC.

    結(jié)果Hiberate Tools 生成的SQL是這樣:

    ?

    select
    topic0_.BOID?
    as ?col_0_0_,
    topic0_.COMPANY?
    as ?col_1_0_,
    company1_.COMPID?
    as ?COMPID409_,
    company1_.COMPNAME?
    as ?COMPNAME409_,
    company1_.DESCRIPTION?
    as ?DESCRIPT3_409_,
    company1_.STATUS?
    as ?STATUS409_?
    from
    DT_TOPIC?topic0_?
    inner ? join
    XPC_COMPANY?company1_?
    on ?topic0_.COMPANY = company1_.COMPID

    ?

    Hibernate生成的SQL多做了兩件影響性能的事情:

    1, 與XPC_COMPANY進(jìn)行inner join。

    2,把XPC_COMPANY中的所有字段全取出來了。

    這樣還叫什么延遲加載啊?

    ?

    哪位高手能告訴我這是為什么?

    posted on 2007-01-17 21:54 Welkin Hu 閱讀(3023) 評(píng)論(4)  編輯  收藏 所屬分類: Java

    Feedback

    # re: Hibernate的多對(duì)一關(guān)系是如何延遲加載的? 2007-01-18 09:59 小雪飛刀
    當(dāng)然不會(huì)延遲了!
    您的lazy ="no-proxy"
    <many-to-one>默認(rèn)的屬性是lazy="proxy",此時(shí)默認(rèn)是會(huì)延遲加載的。而在指定了lazy="true"之后,必須要經(jīng)過運(yùn)行期字節(jié)碼增加,延遲加載才有效果。  回復(fù)  更多評(píng)論
      

    # re: Hibernate的多對(duì)一關(guān)系是如何延遲加載的? 2007-01-18 10:06 小雪飛刀
    而對(duì)于<one-to-one>的情況,延遲加載還要受到constrained屬性的影響。如果當(dāng)constrained="true",lazy="proxy"(默認(rèn)),是可以延遲加載的。因?yàn)閏onstrained="false"時(shí)表明實(shí)體和被關(guān)聯(lián)到的實(shí)體的約束不是強(qiáng)制的,這時(shí)在查詢實(shí)體時(shí),Hibernate總會(huì)檢查<one-to-one>所關(guān)聯(lián)的實(shí)體是否存在,就把one-to-one關(guān)聯(lián)的實(shí)體查詢出來了,所以constrained需要設(shè)為"true"。
      回復(fù)  更多評(píng)論
      

    # re: Hibernate的多對(duì)一關(guān)系是如何延遲加載的? 2007-01-18 10:35 Welkin Hu
    我用的是Hibernate 3.2.1,在Many-to-one中的Lazy只能取proxy, no-proxy, false,沒有true。
    上面三種Lazy方法我都試過,結(jié)果是一樣的。
    在Hibernate3.2.1參考文檔中是這樣解釋的。
    lazy (optional - defaults to proxy): By default, single point associations are proxied. lazy="no-proxy"
    specifies that the property should be fetched lazily when the instance variable is first accessed (requires
    build-time bytecode instrumentation). lazy="false" specifies that the association will always be eagerly
    fetched.
    按這個(gè)解釋,no-proxy也是延遲加載啊。  回復(fù)  更多評(píng)論
      

    # re: Hibernate的多對(duì)一關(guān)系是如何延遲加載的? 2007-01-22 09:19 Welkin Hu
    前天按Hibernate 3.2.1 reference book,玩通了上面說的build-time bytecode instrumentation,并且設(shè)置lazy="proxy",引用表端也設(shè)置了lazy="true",最終生成的SQL還是老樣子!
    只有兩種情況在例外,無論做不做instrumentation:
    1,只有from,沒有select子句。
    2, 使用select company.id代替select company。  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 久久夜色精品国产亚洲| 久久午夜免费鲁丝片| 国产精品久久久久久久久久免费| 国产做床爱无遮挡免费视频| yellow免费网站| 亚洲乱码在线视频| 亚洲国产成人久久精品99| 人人揉揉香蕉大免费不卡| 一本色道久久88—综合亚洲精品 | 99视频精品全部免费观看| 中文字幕乱码亚洲精品一区| 亚洲黄色免费电影| 18gay台湾男同亚洲男同| 久久久精品视频免费观看| 亚洲国产成人久久一区WWW| 91香蕉在线观看免费高清| 亚洲三级电影网站| 四虎永久成人免费| 777成影片免费观看| 男男gay做爽爽的视频免费| 亚洲自偷自拍另类12p| 亚洲av无码国产精品色在线看不卡| 无码人妻丰满熟妇区免费| 男性gay黄免费网站| 波多野结衣亚洲一级| 亚洲欧洲日产国码无码久久99| 国产在线观看xxxx免费| 亚洲综合久久精品无码色欲| 亚洲av无码专区国产乱码在线观看| 亚欧免费一级毛片| 欧洲美女大片免费播放器视频 | 三级黄色片免费看| 色偷偷亚洲男人天堂| 久久精品国产亚洲一区二区三区| 精品久久久久久久久免费影院| 亚洲男人的天堂网站| 亚洲国产V高清在线观看| 无码视频免费一区二三区| 十八禁的黄污污免费网站| 亚洲AV无码专区国产乱码电影 | 免费特级黄毛片在线成人观看|