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

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

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

    隨筆 - 63  文章 - 0  trackbacks - 0
    <2009年4月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    (轉(zhuǎn))Hibernate支持兩種鎖機(jī)制:
    即通常所說的“悲觀鎖(Pessimistic Locking)”和
    “樂觀鎖(OptimisticLocking)”。
    悲觀鎖的實(shí)現(xiàn),往往依靠數(shù)據(jù)庫提供的鎖機(jī)制(也只有數(shù)據(jù)庫層提供的鎖機(jī)制才能真正保證數(shù)據(jù)訪問的排他性,否則,即使在本系統(tǒng)中實(shí)現(xiàn)了加鎖機(jī)制,也無法保證外部系統(tǒng)不會(huì)修改數(shù)據(jù))。
    Hibernate的加鎖模式有:
    Ø LockMode.NONE : 無鎖機(jī)制。
    Ø LockMode.WRITE :Hibernate在Insert和Update記錄的時(shí)候會(huì)自動(dòng)
    獲取。
    Ø LockMode.READ : Hibernate在讀取記錄的時(shí)候會(huì)自動(dòng)獲取。
    以上這三種鎖機(jī)制一般由Hibernate內(nèi)部使用,如Hibernate為了保證Update
    過程中對(duì)象不會(huì)被外界修改,會(huì)在save方法實(shí)現(xiàn)中自動(dòng)為目標(biāo)對(duì)象加上WRITE鎖。
    Ø LockMode.UPGRADE :利用數(shù)據(jù)庫的for update子句加鎖。
    Ø LockMode. UPGRADE_NOWAIT :Oracle的特定實(shí)現(xiàn),利用Oracle的for
    update nowait子句實(shí)現(xiàn)加鎖。
    樂觀鎖,大多是基于數(shù)據(jù)版本(Version)記錄機(jī)制實(shí)現(xiàn)。何謂數(shù)據(jù)版本?即為數(shù)據(jù)增加一個(gè)版本標(biāo)識(shí),在基于數(shù)據(jù)庫表的版本解決方案中,一般是通過為數(shù)據(jù)庫表增加一個(gè)“version”字段來實(shí)現(xiàn)。讀取出數(shù)據(jù)時(shí),將此版本號(hào)一同讀出,之后更新時(shí),對(duì)此版本號(hào)加一。此時(shí),將提交數(shù)據(jù)的版本數(shù)據(jù)與數(shù)據(jù)庫表對(duì)應(yīng)記錄的當(dāng)前版本信息進(jìn)行比對(duì),如果提交的數(shù)據(jù)版本號(hào)大于數(shù)據(jù)庫表當(dāng)前版本號(hào),則予以更新,否則認(rèn)為是過期數(shù)據(jù)。
    悲觀鎖與樂觀鎖的比較:
    悲觀鎖大多數(shù)情況下依靠數(shù)據(jù)庫的鎖機(jī)制實(shí)現(xiàn),以保證操作最大程度的獨(dú)占性。但隨之而來的就是數(shù)據(jù)庫性能的大量開銷,特別是對(duì)長事務(wù)而言,這樣的開銷往往無法承受;
    相對(duì)悲觀鎖而言,樂觀鎖機(jī)制采取了更加寬松的加鎖機(jī)制。樂觀鎖機(jī)制往往基于系統(tǒng)中的數(shù)據(jù)存儲(chǔ)邏輯,因此也具備一定的局限性,如在上例中,由于樂觀鎖機(jī)制是在我們的系統(tǒng)中實(shí)現(xiàn),來自外部系統(tǒng)的更新操作不受我們系統(tǒng)的控制,因此可能會(huì)造成臟數(shù)據(jù)被更新到數(shù)據(jù)庫中。在
    系統(tǒng)設(shè)計(jì)階段,我們應(yīng)該充分考慮到這些情況出現(xiàn)的可能性,并進(jìn)行相應(yīng)調(diào)整(如將樂觀鎖策略在數(shù)據(jù)庫存儲(chǔ)過程中實(shí)現(xiàn),對(duì)外只開放基于此存儲(chǔ)過程的數(shù)據(jù)更新途徑,而不是將數(shù)據(jù)庫表直接對(duì)外公開)。
    Hibernate 在其數(shù)據(jù)訪問引擎中內(nèi)置了樂觀鎖實(shí)現(xiàn)。如果不用考慮外部系統(tǒng)對(duì)數(shù)據(jù)庫的更新操作,利用Hibernate提供的透明化樂觀鎖實(shí)現(xiàn),將大大提升我們的生產(chǎn)力。
    Hibernate中可以通過class描述符的optimistic-lock屬性結(jié)合version描述符指定。
    optimistic-lock屬性有如下可選取值:
    Ø none
    無樂觀鎖
    Ø version
    通過版本機(jī)制實(shí)現(xiàn)樂觀鎖
    Ø dirty
    通過檢查發(fā)生變動(dòng)過的屬性實(shí)現(xiàn)樂觀鎖
    Ø all
    通過檢查所有屬性實(shí)現(xiàn)樂觀鎖
    其中通過version實(shí)現(xiàn)的樂觀鎖機(jī)制是Hibernate官方推薦的樂觀鎖實(shí)現(xiàn),同時(shí)也是Hibernate中,目前唯一在數(shù)據(jù)對(duì)象脫離 Session發(fā)生修改的情況下依然有效的鎖機(jī)制。因此,一般情況下,我們都選擇version方式作為Hibernate樂觀鎖實(shí)現(xiàn)機(jī)制。
    posted on 2009-04-12 16:12 lanxin1020 閱讀(184) 評(píng)論(0)  編輯  收藏 所屬分類: hibernate
    主站蜘蛛池模板: 中文字幕在线免费观看视频| 菠萝菠萝蜜在线免费视频| 成在线人免费无码高潮喷水| 亚洲国产高清在线一区二区三区| 激情吃奶吻胸免费视频xxxx| 免费大香伊蕉在人线国产 | av无码免费一区二区三区| 亚洲综合自拍成人| 亚洲黄色免费观看| 亚洲色丰满少妇高潮18p| 欧洲精品免费一区二区三区| 色视频在线观看免费| 亚洲最大激情中文字幕| 美女视频黄a视频全免费网站色窝| 亚洲国产精品无码久久久不卡| 久久伊人免费视频| 亚洲一级黄色大片| 无码国产亚洲日韩国精品视频一区二区三区| 亚洲AV无码AV男人的天堂不卡| 亚洲av午夜精品一区二区三区| 国产精品九九久久免费视频 | 猫咪免费人成网站在线观看| 亚洲AV无码一区二区三区人| 国产成人3p视频免费观看| 国产99久久久久久免费看| 亚洲日韩区在线电影| 好男人看视频免费2019中文| 一级一级毛片免费播放| 亚洲午夜在线电影| 真实乱视频国产免费观看| 岛国岛国免费V片在线观看| 亚洲黄网在线观看| 国产一级淫片a视频免费观看| 二区久久国产乱子伦免费精品| 久久久久亚洲精品天堂| 国产免费黄色大片| 日韩精品极品视频在线观看免费| 亚洲人成人伊人成综合网无码| 国产亚洲美日韩AV中文字幕无码成人 | 精品亚洲av无码一区二区柚蜜| 亚洲人成色77777|