konhon

          忘掉過(guò)去,展望未來(lái)。找回自我,超越自我。
          逃避不一定躲的過(guò), 面對(duì)不一定最難過(guò), 孤單不一定不快樂(lè), 得到不一定能長(zhǎng)久, 失去不一定不再擁有, 可能因?yàn)槟硞€(gè)理由而傷心難過(guò), 但我卻能找個(gè)理由讓自己快樂(lè).

          Google

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks
          Hibernate中的實(shí)體物件可以分為三種狀態(tài):Transient、Persistent、Detached
          • Transient
          當(dāng)您直接使用new創(chuàng)建出物件,例如在之前的例子中,User類別所衍生出之物件,在還沒(méi)有使用save()之前都是暫存物件,這些物件還沒(méi)有與資料庫(kù)發(fā)生任何的關(guān)係,不對(duì)應(yīng)於資料庫(kù)中的任一筆資料。

          • Persistent
          當(dāng)物件與資料庫(kù)中的資料有對(duì)應(yīng)關(guān)係,並且與Session實(shí)例有關(guān)聯(lián)而Session 實(shí)例尚未關(guān)閉(close),則它是在Persistent狀態(tài),具體而言,如果您將Transient狀態(tài)的物件使用Session的save()方法加以儲(chǔ)存,或是使用Hibernate從資料庫(kù)載入資料並封裝為物件(例如使用get()、load()),則該物件為Persistent狀態(tài)。

          Persistent狀態(tài)的物件對(duì)應(yīng)於資料庫(kù)中的一筆資料,物件的id值與資料的主鍵值相同,並且Session實(shí)例尚未失效,在這期間您對(duì)物件的任何狀態(tài)變動(dòng),在Session實(shí)例關(guān)閉(close)或Transaction實(shí)例執(zhí)行commit()之後,資料庫(kù)中對(duì)應(yīng)的資料也會(huì)跟著更新。

          如果您將Session實(shí)例關(guān)閉(close),則Persistent狀態(tài)的物件會(huì)成為Detached狀態(tài)。

          如果您使用Session的實(shí)例delete()方法刪除資料,Persistent狀態(tài)的物件由於失去了對(duì)應(yīng)的資料,則它會(huì)成為Transient狀態(tài)。
          • Detached
          Detached狀態(tài)的物件,其id與資料庫(kù)的主鍵值對(duì)應(yīng),但脫離Session實(shí)例的管理,例如在使用load()方法查詢到資料並封裝為物件之後,將Session實(shí)例關(guān)閉,則物件由Persistent狀態(tài)變?yōu)镈etached狀態(tài),Detached狀態(tài)的物件之任何屬性變動(dòng),不會(huì)對(duì)資料庫(kù)中的資料造成任何的影響。

          Detached狀態(tài)的物件可以使用update()方法使之與資料庫(kù)中的對(duì)應(yīng)資料再度發(fā)生關(guān)聯(lián),此時(shí)Detached狀態(tài)的物件會(huì)變?yōu)镻ersistent狀態(tài)。
          簡(jiǎn)單的說(shuō),Transient與Detached狀態(tài)的物件未受Hibernate持久層管理員管理,對(duì)這兩個(gè)狀態(tài)的物件作任何屬性變動(dòng),不會(huì)對(duì)資料庫(kù)中的資料有任何的影響,而Persistent狀態(tài)的物件受Hibernate持久層管理,對(duì)物件的屬性變動(dòng),在Session實(shí)例關(guān)閉(close)或 Transaction實(shí)例執(zhí)行commit()之後,資料庫(kù)中對(duì)應(yīng)的資料也會(huì)跟著更新。

          Transient與Detached狀態(tài)的物件是非管理狀態(tài),而Persistent狀態(tài)的物件是管理狀態(tài),又稱為Persistent Object。

          在物件為Persistent時(shí),如果物件的屬性發(fā)生變化,並且尚未提交之前,物件所攜帶的資料稱之為Dirty Data,Hibernate會(huì)在持久層維護(hù)物件的最近讀取版本,並在資料提交時(shí)檢查兩個(gè)版本的屬性是否有變化,如果有的話,則將資料庫(kù)中的資料進(jìn)行更新。

          posted on 2005-08-10 22:11 konhon 優(yōu)華 閱讀(346) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 昌邑市| 石城县| 北流市| 永嘉县| 旺苍县| 南部县| 翼城县| 成武县| 航空| 东莞市| 大方县| 沿河| 浪卡子县| 上蔡县| 晋宁县| 金沙县| 大姚县| 白玉县| 新龙县| 阿克| 永顺县| 平塘县| 安阳县| 岢岚县| 临洮县| 河南省| 阿拉尔市| 麻城市| 壶关县| 阳新县| 咸阳市| 敖汉旗| 新蔡县| 普格县| 北川| 营口市| 龙海市| 泰顺县| 上蔡县| 黎川县| 韶山市|