|
瞬時(shí)狀態(tài)(Transient)、持久狀態(tài)(Persistent)、脫管狀態(tài)(Detached)
1、瞬時(shí)狀態(tài)(Transient) 由new命令開辟內(nèi)存空間的Java對(duì)象,也就是平時(shí)所熟悉的普通Java對(duì)象。 如:Person p = new Person(); 瞬時(shí)對(duì)象特點(diǎn): (1)不和Session實(shí)例關(guān)聯(lián) (2)在數(shù)據(jù)庫(kù)中沒(méi)有和瞬時(shí)對(duì)象關(guān)聯(lián)的記錄 2、持久狀態(tài)(Persistent) 持久的實(shí)例在數(shù)據(jù)庫(kù)中有對(duì)應(yīng)的記錄,并擁有一個(gè)持久化標(biāo)識(shí)(identifier). 持久對(duì)象總是與Session和Transaction相關(guān)聯(lián),在一個(gè)Session中,對(duì)持久對(duì)象的改變不會(huì)馬上對(duì)數(shù)據(jù)庫(kù)進(jìn)行變更,而必須在 Transaction終止,也就是執(zhí)行commit()之后,才在數(shù)據(jù)庫(kù)中真正運(yùn)行SQL進(jìn)行變更,持久對(duì)象的狀態(tài)才會(huì)與數(shù)據(jù)庫(kù)進(jìn)行同步。在同步之前的持久對(duì)象稱為臟(dirty)對(duì)象。 瞬時(shí)對(duì)象轉(zhuǎn)為持久對(duì)象: (1) 通過(guò)Session的save()和saveOrUpdate()方法把一個(gè)瞬時(shí)對(duì)象與數(shù)據(jù)庫(kù)相關(guān)聯(lián),這個(gè)瞬時(shí)對(duì)象就成為持久化對(duì)象。 (2) 使用fine(),get(),load()和iterater()待方法查詢到的數(shù)據(jù)對(duì)象,將成為持久化對(duì)象。 持久化對(duì)象的特點(diǎn): (1) 和Session實(shí)例關(guān)聯(lián) (2) 在數(shù)據(jù)庫(kù)中有和持久對(duì)象關(guān)聯(lián)的記錄 3、脫管狀態(tài)(Detached) 與持久對(duì)象關(guān)聯(lián)的Session被關(guān)閉后,對(duì)象就變?yōu)槊摴軐?duì)象。對(duì)脫管對(duì)象的引用依然有效,對(duì)象可繼續(xù)被修改。 脫管對(duì)象特點(diǎn): (1) 本質(zhì)上和瞬時(shí)對(duì)象相同 (2) 只是比愛(ài)瞬時(shí)對(duì)象多了一個(gè)數(shù)據(jù)庫(kù)記錄標(biāo)識(shí)值id. 持久對(duì)象轉(zhuǎn)為脫管對(duì)象: 當(dāng)執(zhí)行close()或clear(),evict()之后,持久對(duì)象會(huì)變?yōu)槊摴軐?duì)象。 瞬時(shí)對(duì)象轉(zhuǎn)為持久對(duì)象: 通過(guò)Session的update(),saveOrUpdate()和lock()等方法,把脫管對(duì)象變?yōu)槌志脤?duì)象 |
|
|
來(lái)自: 耍庫(kù) > 《吳延峰個(gè)人圖書館》