hibernate提供了三種對象狀態(tài)
- 瞬時(Transient) — 由 new 操作符創(chuàng)建树埠,且尚未與Hibernate
Session 關(guān)聯(lián)的對象被認(rèn)定為瞬時(Transient)的。瞬時(Transient)對象不會被持久化到數(shù)
據(jù)庫中把敞,也不會被賦予持久化標(biāo)識(identifier)弥奸。 如果瞬時(Transient)對象在程序中沒
有被引用,它會被垃圾回收器(garbage collector)銷毀奋早。 使用 Hibernate Session可以將其
變?yōu)槌志茫≒ersistent)狀態(tài)盛霎。(Hibernate會自動執(zhí)行必要的SQL語句) - 持久(Persistent) — 持久(Persistent)的實例在數(shù)據(jù)庫中有對應(yīng)的記錄赠橙,并擁有一
個持久化標(biāo)識(identifier)。 持久(Persistent)的實例可能是剛被保存的愤炸,或剛被加載
的期揪,無論哪一種,按定義规个,它存在于相關(guān)聯(lián)的Session作用范圍內(nèi)凤薛。 Hibernate會檢測到處于持
久(Persistent)狀態(tài)的對象的任何改動,在當(dāng)前操作單元(unit of work)執(zhí)行完畢時將對
象數(shù)據(jù)(state)與數(shù)據(jù)庫同步(synchronize)诞仓。 開發(fā)者不需要手動執(zhí)行UPDATE缤苫。將對象從持
久(Persistent)狀態(tài)變成瞬時(Transient)狀態(tài)同樣也不需要手動執(zhí)行 DELETE 語句。 - 脫管(Detached) — 與持久(Persistent)對象關(guān)聯(lián)的Session被關(guān)閉后墅拭,對象就變?yōu)槊摴?br>
(Detached)的活玲。對脫管(Detached)對象的引用依然有效,對象可繼續(xù)被修改谍婉。脫管
(Detached)對象如果重新關(guān)聯(lián)到某個新的 Session 上舒憾, 會再次轉(zhuǎn)變?yōu)槌志茫≒ersistent)的
(在Detached其間的改動將被持久化到數(shù)據(jù)庫)。 這個功能使得一種編程模型穗熬,即中間會給用
戶思考時間(user think-time)的長時間運(yùn)行的操作單元(unit of work)的編程模型成為可
能镀迂。我們稱之為應(yīng)用程序事務(wù),即從用戶觀點看是一個操作單元(unit of work)唤蔗。