|
最近學習了一下hibernate(hibernate三種狀態(tài)的講解),看到網(wǎng)上有一篇寫得還挺不錯,就轉(zhuǎn)載下來,自己寫的不一定比人家總結(jié)得好,還結(jié)合了孔浩老師上課的案例代碼,下面是詳細內(nèi)容: 下面是轉(zhuǎn)自:http://www./asktalk/archive/2006/01/18/28548.html的一篇文章 在Hibernate中有三種狀態(tài),對它的深入理解,才能更好的理解hibernate的運行機理,剛開始不太注意這些概念,后來發(fā)現(xiàn)它是重要的。對于理解hibernate,JVM和sql的關(guān)系有更好的理解。對于需要持久化的JAVA對象,在它的生命周期中有三種狀態(tài),而且互相轉(zhuǎn)化。 1, 臨時狀態(tài)(Transient):用new創(chuàng)建的對象,它沒有持久化,沒有處于Session中,處于此狀態(tài)的對象叫臨時對象; 2, 持久化狀態(tài)(Persistent):已經(jīng)持久化,加入到了Session緩存中。如通過hibernate語句保存的對象。處于此狀態(tài)的對象叫持久對象; 3, 游離狀態(tài)(Detached):持久化對象脫離了Session的對象。如Session緩存被清空的對象。
狀態(tài)轉(zhuǎn)換圖,結(jié)束官方的和轉(zhuǎn)載作者的
兩者都不會被Session關(guān)聯(lián),對象屬性和數(shù)據(jù)庫可能不一致; 游離對象有持久化對象關(guān)閉Session而轉(zhuǎn)化而來,在內(nèi)存中還有對象所以此時就變成游離狀態(tài)了; 在操作了hibernate的方法如save()等后,并沒有直接生成sql語句,去操作數(shù)據(jù)庫,而是把這些更新存入Session中,只有Session緩存要被更新時,底層的sql語句才能執(zhí)行,數(shù)據(jù)存入數(shù)據(jù)庫; 下面是孔浩老師講課的代碼: |
|
|