国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Hibernate的延遲加載問題
Hibernate的延遲加載問題 --常言笑的家
 
       眾所周知,到了Hibernate3.0以后,關(guān)聯(lián)關(guān)系的對(duì)象默認(rèn)都是使用延遲加載,例如<one-to-many>時(shí).但我在映射<one-to-one>,<many-to-one>關(guān)系時(shí)指定了lazy="true",但是在查詢對(duì)象時(shí),我只想查詢一個(gè)對(duì)象,仍然會(huì)把這個(gè)對(duì)象所關(guān)聯(lián)的<one-to-one>,<many-to-one>對(duì)象一起查詢出來,這樣造成了極大的性能浪費(fèi).在不指定lazy屬性時(shí),<many-to-one>所關(guān)聯(lián)的對(duì)象反而會(huì)延遲加載,這讓我大為困惑,還以為是Hibernate的bug. 

        在網(wǎng)上查找資料,說在為了延遲加載<one-to-one>,<many-to-one>所關(guān)聯(lián)的對(duì)象,需要設(shè)置被關(guān)聯(lián)的對(duì)象<class name="" lazy="true">,我也這樣做了,但是仍然沒有效果.

         仔細(xì)閱讀了Hibernate的手冊(cè),才發(fā)現(xiàn)原來要延遲加載<one-to-one>,<many-to-one>所關(guān)聯(lián)的對(duì)象時(shí),除了要指定lazy="true"外,還需要運(yùn)行期字節(jié)碼增強(qiáng),而我省去了這一步,所以延遲加載沒有效果.同時(shí)還發(fā)現(xiàn)在默認(rèn)情況下,<one-to-one>,<many-to-one>的lazy屬性是"proxy"而不是"true"!因此如果直接采用lazy的默認(rèn)值,是可以延遲加載的.

總結(jié)一下:
        <many-to-one>默認(rèn)的屬性是lazy="proxy",此時(shí)默認(rèn)是會(huì)延遲加載的.在指定了lazy="true"之后,必須要經(jīng)過運(yùn)行期字節(jié)碼增加,延遲加載才有效果.
 
        而<one-to-one>相對(duì)要復(fù)雜一點(diǎn),延遲加載還要受到constrained屬性的限制.constrained="false"時(shí)表明實(shí)體和被關(guān)聯(lián)到的實(shí)體的約束不是強(qiáng)制的,即存在一個(gè)實(shí)體時(shí),它通過<one-to-one>關(guān)聯(lián)的實(shí)體可能存在,也可能不存在,這時(shí)在查詢實(shí)體時(shí),Hibernate總會(huì)發(fā)起一次查詢檢查<one-to-one>所關(guān)聯(lián)的實(shí)體是否存在,而這時(shí)已經(jīng)可以把one-to-one關(guān)聯(lián)的實(shí)體查詢出來了,因此在<one-to-one>關(guān)系中,如果constrained="false",總是會(huì)立即加載關(guān)聯(lián)到的實(shí)體.

        如果當(dāng)constrained="true",且lazy="proxy"(默認(rèn)),是可以延遲加載的.
        如果當(dāng)constrained="true",且lazy="true"時(shí),需要經(jīng)過運(yùn)行期字節(jié)碼增加,延遲加載才會(huì)奏效.
 
Open Session In View
       使用Open Session In View就有一個(gè)好處,就是當(dāng)頁面需要使用關(guān)聯(lián)后的實(shí)體時(shí)才會(huì)去查找緩存中是否已經(jīng)有所需要的對(duì)象實(shí)體了,如果有直接返回結(jié)果,如果沒有才重新查詢。
 
cache
        cache就是Hibernate使用的緩存。如果你的數(shù)據(jù)是頻繁更新的,比如銀行系統(tǒng),那么,你的數(shù)據(jù)做cache是不安全的,那么你的取數(shù)據(jù)的策略需要級(jí)別高一些,甚至是需要事務(wù)級(jí)的取緩存數(shù)據(jù);如果你的數(shù)據(jù)是頻繁讀取,修改少的,我可以放心的緩存,不必設(shè)置過高的緩存并發(fā)控制級(jí)別,比如是論壇系統(tǒng),那么你說的問題幾乎不可能出現(xiàn)啊。
         兩面性是有,但是我們根據(jù)場合,在合適的場合使用合適的一面,那就不ok了?我得問題討論的前提是使用cache沒有并發(fā)更新之類問題的前提下的,是指在使用cache時(shí)不需要考慮另一面性的前提下,這種情況下談何兩面性。
 
什么樣的數(shù)據(jù)適合存放到第二級(jí)緩存中?
       1、很少被修改的數(shù)據(jù)
   2、不是很重要的數(shù)據(jù),允許出現(xiàn)偶爾并發(fā)的數(shù)據(jù)
   3、不會(huì)被并發(fā)訪問的數(shù)據(jù)
   4、參考數(shù)據(jù)

不適合存放到第二級(jí)緩存的數(shù)據(jù)?
   1、經(jīng)常被修改的數(shù)據(jù)
   2、財(cái)務(wù)數(shù)據(jù),絕對(duì)不允許出現(xiàn)并發(fā)
   3、與其他應(yīng)用共享的數(shù)據(jù)。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ssh框架問題
Hibernate延遲加載機(jī)制 - 解的日志 - 網(wǎng)易博客
Hibernate中g(shù)et方法和load方法的區(qū)別
Hibernate(四)
Hibernate中的取策略延遲加載
Hibernate數(shù)據(jù)加載方式
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服