posts - 70,comments - 408,trackbacks - 0
                Hibernate向我們提供的主要的操縱數(shù)據(jù)庫(kù)的接口,Session就是其中的一個(gè),它提供了基本的增,刪,改,查方法.而且具有一個(gè)緩存機(jī)制,能夠按照某個(gè)時(shí)間點(diǎn),按照緩存中的持久化對(duì)象屬性的變化來(lái)更新數(shù)據(jù)庫(kù),著就是Session的緩存清理過(guò)程.在Hibernate中對(duì)象分為三個(gè)狀態(tài),臨時(shí),持久化,游離.如果我們希望JAVA里的一個(gè)對(duì)象一直存在,就必須有一個(gè)變量一直引用著這個(gè)對(duì)象.當(dāng)這個(gè)變量沒(méi)了.對(duì)象也就被JVM回收了.當(dāng)然這個(gè)是最基本的常識(shí)了.當(dāng)Session的save()方法持久化了一個(gè)對(duì)象的時(shí)候,即使這個(gè)對(duì)象的引用變量小時(shí)了.這個(gè)對(duì)象也依然存在,因?yàn)镾essoin里保存了一個(gè)這個(gè)對(duì)象的引用,當(dāng)然Session緩存被清空,這個(gè)對(duì)象就OVER了.在這個(gè)對(duì)象保存在Sessoin的時(shí)候如果調(diào)用load()方法試圖去數(shù)據(jù)庫(kù)中加載一個(gè)對(duì)象,這個(gè)時(shí)候Session會(huì)先判斷緩存中有沒(méi)有這個(gè)對(duì)象,如果有了,那么就不需要去數(shù)據(jù)庫(kù)加載了.這樣可以減少訪問(wèn)數(shù)據(jù)庫(kù)的頻率,還可以保證緩存中的對(duì)象于數(shù)據(jù)庫(kù)的同步.
                Session有兩個(gè)方法,一個(gè)commit()事務(wù)提交方法,還有flush()刷新緩存方法,都有著清理緩存的作用,flush()進(jìn)行緩存的清理,執(zhí)行一系列的SQL語(yǔ)句,但不會(huì)提交事務(wù).而commit()方法會(huì)先調(diào)用flush()方法,然后在提交事務(wù).Session還有一個(gè)方法就是setFushMode()方法,用戶(hù)設(shè)定清理緩存的時(shí)間點(diǎn),主要有三種模式,默認(rèn)Flush.Mode.AUTO
                1)FlushMode.AUTO Session的查詢(xún)方法,commit方法,flush方法都會(huì)清理緩存.
                2)FlushMode.COMMIT Session的commit方法,flush方法會(huì)清理緩存.
                3)FlushMode.NEVER Session的flush方法會(huì)清理緩存.
          對(duì)象的臨時(shí)狀態(tài):剛用new創(chuàng)建對(duì)象的時(shí)候,它還沒(méi)有被持久化,這個(gè)時(shí)候是臨時(shí)狀態(tài).
          對(duì)象的持久化狀態(tài):已經(jīng)被加入到Session的緩存中,通常所說(shuō)的持久化對(duì)象就是只一個(gè)對(duì)象在這個(gè)狀態(tài)的時(shí)候.
          對(duì)象的游離狀態(tài):已經(jīng)被持久化,但是不屬于Session的緩存的時(shí)候是游離狀態(tài).
          posted on 2007-05-24 15:43 我心依舊 閱讀(3859) 評(píng)論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 敦煌市| 于都县| 万州区| 嘉兴市| 石首市| 安庆市| 金沙县| 渑池县| 彝良县| 磐安县| 虞城县| 岚皋县| 英吉沙县| 高安市| 平和县| 衡东县| 虞城县| 屯昌县| 赫章县| 大埔县| 张家界市| 电白县| 襄城县| 鄂托克旗| 准格尔旗| 元江| 孟津县| 长宁区| 府谷县| 惠州市| 天津市| 屏山县| 泊头市| 红河县| 万荣县| 山丹县| 盐城市| 怀化市| 乐都县| 广灵县| 奉化市|