Hibernate的延遲屬性抓取

          再次犯了沒有仔細(xì)看Hibernate Reference的錯(cuò)誤,在Hibernate 3以上版本都支持對(duì)于property設(shè)置lazy="true",但一直我都以為只要設(shè)置了就可以實(shí)現(xiàn)的,今天和jindw討論的時(shí)候才知道原來不是這樣,^_^,趕快做了下試驗(yàn),確實(shí),即使對(duì)于property設(shè)置了lazy="true",但在調(diào)用獲取了po中的任意非主鍵屬性時(shí)其他所有的property也就被加載了,也就是說lazy沒有生效,到底怎么回事呢,翻閱Hibernate Reference才明白了這個(gè)問題:
          property
          (7)lazy (可選,默認(rèn)為false) 指定實(shí)例變量第一次被訪問時(shí),這個(gè)屬性是否延遲抓取(需要運(yùn)行時(shí)字節(jié)碼增強(qiáng))
          其實(shí)看這部分會(huì)在最后那句需要運(yùn)行時(shí)字節(jié)碼增強(qiáng)上迷糊,在hibernate reference中還有一句這樣的話:“Hibernate也不需要使用任何編譯期處理,比如字節(jié)碼增強(qiáng)操作,它獨(dú)立的使用Java反射機(jī)制和運(yùn)行時(shí)增強(qiáng)(通過CGLIB)?!?br />?這就非常迷糊了,因?yàn)檫@里已經(jīng)說了比如字節(jié)碼增強(qiáng)操作....
          不過還好在Hibernate Reference中有個(gè)專門的章節(jié)來解釋property lazy的問題,這個(gè)章節(jié)就是使用延遲屬性抓取,在這里才算是完全看明白了:
          “屬性的延遲載入要求在其代碼構(gòu)建時(shí)加入二進(jìn)制指令,如果你的持久類代碼中未含有這些指令,Hibernate將會(huì)忽略這些屬性的延遲設(shè)置,仍然將其直接載入?!?br />看完這段就明白了,也就是說要在編譯期對(duì)代碼進(jìn)行字節(jié)碼增強(qiáng),關(guān)于編譯期進(jìn)行字節(jié)碼增強(qiáng)的實(shí)現(xiàn)具體見Hibernate Reference,里面列出了一個(gè)采用ant task完成編譯時(shí)字節(jié)碼增強(qiáng)的實(shí)現(xiàn)。

          想明白后懷疑是不是Hibernate Reference中文版中翻譯錯(cuò)了?寫的應(yīng)該是需要編譯時(shí)字節(jié)碼增強(qiáng)吧,果然,查閱了一下Hibernate Reference英文版,上面寫的就是requires build-time bytecode instrumentation...
          不過Hibernate Reference中文版中component部分的lazy翻譯的又是對(duì)的,那里的翻譯就是需要編譯時(shí)字節(jié)碼增強(qiáng),^_^

          posted on 2006-04-05 22:45 BlueDavy 閱讀(5144) 評(píng)論(5)  編輯  收藏 所屬分類: Java

          評(píng)論

          # re: Hibernate的延遲屬性抓取 2006-04-06 13:22 曹曉鋼

          為啥不告訴我涅.......才好更正啊。幸虧我看到了  回復(fù)  更多評(píng)論   

          # re: Hibernate的延遲屬性抓取 2006-04-06 19:42 fanta

          個(gè)人感覺property的lazy意義不是太大,lazy還是在關(guān)聯(lián)表時(shí)對(duì)性能影響很大,尤其是一對(duì)多關(guān)系時(shí)  回復(fù)  更多評(píng)論   

          # re: Hibernate的延遲屬性抓取 2006-04-06 20:24 BlueDavy

          特別場(chǎng)合有用而已(例如數(shù)百個(gè)列或者說大數(shù)據(jù)字段),所以在Hibernate Reference中也提到這只是個(gè)市場(chǎng)特性  回復(fù)  更多評(píng)論   

          # re: Hibernate的延遲屬性抓取 2006-11-09 12:26 和月修

          有點(diǎn)失望啊,原來還要單獨(dú)配置一下,那不用 ANT 的豈不沒戲了。
          那就只能單獨(dú)選擇要取得的列再填值了,雖然麻煩點(diǎn),不過以前 JDBC 時(shí)代都是這么過來的。  回復(fù)  更多評(píng)論   

          # re: Hibernate的延遲屬性抓取 2006-12-05 11:11 goldentom

          針對(duì)blob或clob等需要做lazy的property, 可以自己做一個(gè)proxy,下載時(shí)再用其本身  回復(fù)  更多評(píng)論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導(dǎo)航

          <2006年4月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          統(tǒng)計(jì)

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 曲沃县| 大余县| 开封县| 扎鲁特旗| 金秀| 衡山县| 西乌珠穆沁旗| 防城港市| 高淳县| 德保县| 水富县| 博客| 旌德县| 饶平县| 察隅县| 碌曲县| 海原县| 右玉县| 新和县| 和政县| 峨边| 湄潭县| 章丘市| 甘南县| 台湾省| 个旧市| 桂阳县| 长乐市| 南木林县| 双城市| 恩平市| 灵丘县| 堆龙德庆县| 新泰市| 石渠县| 安国市| 邳州市| 马山县| 六盘水市| 阿图什市| 镶黄旗|