Asktalk

          天行健,君子以自強(qiáng)不息!
          posts - 21, comments - 79, trackbacks - 0, articles - 2
            BlogJava :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理

          Hibernate深入研究3-1

          Posted on 2006-01-18 18:26 Asktalk 閱讀(3838) 評(píng)論(2)  編輯  收藏 所屬分類: Jdbc/Hibernate3/EJB3

          Hibernate中有三種狀態(tài),對(duì)它的深入理解,才能更好的理解hibernate的運(yùn)行機(jī)理,剛開始不太注意這些概念,后來發(fā)現(xiàn)它是重要的。對(duì)于理解hibernateJVMsql的關(guān)系有更好的理解。對(duì)于需要持久化的JAVA對(duì)象,在它的生命周期中有三種狀態(tài),而且互相轉(zhuǎn)化。

          1,  臨時(shí)狀態(tài)(Transient):new創(chuàng)建的對(duì)象,它沒有持久化,沒有處于Session中,處于此狀態(tài)的對(duì)象叫臨時(shí)對(duì)象;

          2,  持久化狀態(tài)(Persistent):已經(jīng)持久化,加入到了Session緩存中。如通過hibernate語句保存的對(duì)象。處于此狀態(tài)的對(duì)象叫持久對(duì)象;

          3,  游離狀態(tài)(Detached):持久化對(duì)象脫離了Session的對(duì)象。如Session緩存被清空的對(duì)象。
          特點(diǎn):已經(jīng)持久化,但不在
          Session緩存中。處于此狀態(tài)的對(duì)象叫游離對(duì)象;

          ×√

          臨時(shí)狀態(tài)

          Transient)

          持久化狀態(tài)

          Persistent)

          游離狀態(tài)

          Detached)

          是否處于Session緩存中

          ×

          ×

          數(shù)據(jù)庫中是否有對(duì)應(yīng)記錄

          ×

           

           

           

           

           

          hibernate3.gif
          游離對(duì)象和臨時(shí)對(duì)象異同:

          兩者都不會(huì)被Session關(guān)聯(lián),對(duì)象屬性和數(shù)據(jù)庫可能不一致;

          游離對(duì)象有持久化對(duì)象關(guān)閉Session而轉(zhuǎn)化而來,在內(nèi)存中還有對(duì)象所以此時(shí)就變成游離狀態(tài)了;

          Hibernate和
          SQL的關(guān)系:

          在操作了hibernate的方法如save()等后,并沒有直接生成sql語句,去操作數(shù)據(jù)庫,而是把這些更新存入Session中,只有Session緩存要被更新時(shí),底層的sql語句才能執(zhí)行,數(shù)據(jù)存入數(shù)據(jù)庫;

          下面舉例說明:
          一,Session.save(user)運(yùn)行機(jī)理。
          1,把User對(duì)象加入緩存中,使它變成持久化對(duì)象;
          2,選用映射文件指定的標(biāo)識(shí)生成ID;
          3,在Session清理緩存時(shí)候執(zhí)行:在底層生成一個(gè)insert sql語句,把對(duì)象存入數(shù)據(jù)庫;

          注意:在你執(zhí)行Session.save(user)后,在Session清理緩存前,如果你修改user對(duì)象屬性值,那么最終存入數(shù)據(jù)庫的值將是最后修改的值;此過程中ID不能被修改;

          二,Session.delete(user)運(yùn)行過程。
          如果user是持久化對(duì)象,則執(zhí)行刪除操作,同樣底層數(shù)據(jù)庫的執(zhí)行條件是:在Session清理緩存時(shí)候;
          如果user是游離對(duì)象:
          1,將user對(duì)象和Session關(guān)聯(lián),使之成為持久化對(duì)象;
          2,然后按照user 是持久化對(duì)象的過程執(zhí)行;


          評(píng)論

          # re: Hibernate深入研究3-1[未登錄]  回復(fù)  更多評(píng)論   

          2007-07-19 12:23 by lj
          老大,講錯(cuò)了吧,對(duì)象都保存到數(shù)據(jù)庫里面了還能稱游離

          # re: Hibernate深入研究3-1  回復(fù)  更多評(píng)論   

          2007-12-29 11:40 by ttnnt
          存入數(shù)據(jù)庫之后,就不能是游離的了????

          開什么玩笑,當(dāng)然可以是了,游離和數(shù)據(jù)庫沒必然的聯(lián)系
          主站蜘蛛池模板: 阿勒泰市| 仁寿县| 泰州市| 仙桃市| 苍南县| 弋阳县| 吉首市| 洛隆县| 民丰县| 牙克石市| 宁乡县| 文化| 岳阳县| 登封市| 乐昌市| 鹤山市| 崇仁县| 苏尼特左旗| 青冈县| 孟连| 青川县| 仪陇县| 万年县| 阿图什市| 沾益县| 潜山县| 宁晋县| 乳山市| 宜兰县| 瑞金市| 娄烦县| 广州市| 股票| 泰州市| 象州县| 丹凤县| 逊克县| 当阳市| 砚山县| 红河县| 高陵县|