實(shí)體對象,特指Hibernate O/R映射關(guān)系中的域?qū)ο蟆?shí)體對象生命周期中的3種狀態(tài)
1、Transient(自由狀態(tài)):所謂Transient,即實(shí)體對象在內(nèi)存中的自由存在,它與數(shù)據(jù)庫中的記錄無關(guān)。
2、Persistent(持久狀態(tài)):即實(shí)體對象處于由Hibernate框架所管理的狀態(tài)。
3、Detached(游離狀態(tài)):處于Persistent狀態(tài)的對象,其對應(yīng)的Session實(shí)例關(guān)閉之后,那么,此對象就處于"Detached"狀態(tài)。
Transient狀態(tài)的user對象與庫表的數(shù)據(jù)缺乏對應(yīng)關(guān)系,而Detached狀態(tài)的user對象,卻在庫表中存在對應(yīng)的記錄,只不過由于Detached對象脫離了session這個(gè)數(shù)據(jù)操作平臺,其狀態(tài)的變化無法更新到庫表中的對應(yīng)記錄。
處于Transient和Detached狀態(tài)的對象統(tǒng)稱為值對象(VO),而處于Persistent狀態(tài)的對象稱為持久對象(PO).這是站在實(shí)體對象是否被納入Hibernate實(shí)體管理容器的立場加以區(qū)分的,非管理的實(shí)體對象統(tǒng)稱為VO,而被管理的實(shí)體對象稱為PO.
VO與PO的主要區(qū)別在于:
1、VO是相對獨(dú)立的實(shí)體對象,處于非管理狀態(tài)。
2、PO是由Hibernate納入其實(shí)體管理容器的對象,它代表了與數(shù)據(jù)庫中某條記錄對應(yīng)的Hibernate實(shí)體,PO的變化在事務(wù)提交時(shí)將反映到實(shí)際數(shù)據(jù)庫中
3、如果一個(gè)PO與其對應(yīng)的Session實(shí)例分離,那么此時(shí),它又會變成一個(gè)VO。
不覆蓋equals/hashCode方法的情況下我們要面對的問題:實(shí)體對象的跨session識別。解決辦法一個(gè)是實(shí)現(xiàn)所謂的值比對,即在equals/hashCode方法中,對實(shí)體類的所有屬性值進(jìn)行比對.除了值比對,還有另外一種基于業(yè)務(wù)邏輯的對象判定方式業(yè)務(wù)關(guān)鍵信息判定。
tx.commint();方法中會調(diào)用session.flush()方法,在flush()方法中會執(zhí)行2個(gè)主要任務(wù)
1、flushEverything();//刷新所有數(shù)據(jù)
2、execute(0);//執(zhí)行數(shù)據(jù)庫SQL完成持久化動作。
數(shù)據(jù)緩存:在特定硬件基礎(chǔ)上緩存往往是提升系統(tǒng)性能的關(guān)鍵因素。緩存是數(shù)據(jù)庫數(shù)據(jù)在內(nèi)存中的臨時(shí)容器,它包含了庫表數(shù)據(jù)在內(nèi)存中的臨時(shí)拷貝,位于數(shù)據(jù)庫與數(shù)據(jù)訪問層之間。ORM在進(jìn)行數(shù)據(jù)讀取時(shí),會根據(jù)其緩存管理策略,首先在緩存中查詢,如果在緩存中發(fā)現(xiàn)所需數(shù)據(jù),則直接以此數(shù)據(jù)作為查詢結(jié)果加以利用,從而避免了數(shù)據(jù)庫調(diào)用的性能開銷。
相對內(nèi)存操作而言,數(shù)據(jù)庫調(diào)用是一個(gè)代價(jià)高昂的過程,對于典型企業(yè)及應(yīng)用結(jié)構(gòu),數(shù)據(jù)庫往往與應(yīng)用服務(wù)器位于不同的物理服務(wù)器,這也就意味著每次數(shù)據(jù)庫訪問都是一次遠(yuǎn)程調(diào)用,Socket的創(chuàng)建與銷毀,數(shù)據(jù)的打包拆包,數(shù)據(jù)庫執(zhí)行查詢命令,網(wǎng)絡(luò)傳輸上的延時(shí),這些消耗都給系統(tǒng)整體性能造成了嚴(yán)重影響。
ORM的數(shù)據(jù)緩存應(yīng)包含如下幾個(gè)層次:
1、事務(wù)級緩存:事務(wù)級緩存是基于Session生命周期實(shí)現(xiàn)的,每個(gè)Session會在內(nèi)部維持一個(gè)數(shù)據(jù)緩存,此緩存隨著Session的創(chuàng)建而存在,因此也成為Session Level Cache(內(nèi)部緩存)
2、應(yīng)用級/進(jìn)程級緩存:在某個(gè)應(yīng)用中,或者應(yīng)用中某個(gè)獨(dú)立數(shù)據(jù)訪問子集中的共享緩存。此緩存可由多個(gè)事物共享。在Hibernate中,應(yīng)用級緩存在SessinFactory層實(shí)現(xiàn),所有由此SessionFactory創(chuàng)建的Session實(shí)例共享此緩存。多實(shí)例并發(fā)運(yùn)行的環(huán)境要特別小心進(jìn)程級緩存的調(diào)用。
3、分布式緩存:分布式緩存由多個(gè)應(yīng)用級緩存實(shí)例組成集群,通過某種遠(yuǎn)程機(jī)制實(shí)現(xiàn)各個(gè)緩存實(shí)例間的數(shù)據(jù)同步,任何一個(gè)實(shí)例的數(shù)據(jù)修改操作,將導(dǎo)致整個(gè)集群間的數(shù)據(jù)狀態(tài)同步。由于多個(gè)實(shí)例間的數(shù)據(jù)同步機(jī)制,每個(gè)緩存實(shí)例發(fā)生的變動都會復(fù)制到其余所有節(jié)點(diǎn)中,這樣的遠(yuǎn)程同步開銷不可忽視。
Hibernate數(shù)據(jù)緩存分為2個(gè)層次,1、內(nèi)部緩存2、二級緩存hibernate中,緩存將在以下情況中發(fā)揮作用:
1、通過ID加載數(shù)據(jù)時(shí)
這包括了根據(jù)id查詢數(shù)據(jù)的Session.load方法,以及Session.ierate等批量查詢方法
2、延遲加載
Session在進(jìn)行數(shù)據(jù)查詢操作時(shí),會首先在自身內(nèi)部的一級緩存中進(jìn)行查找,如果一級緩存未能命中,則將在二級緩存中查詢,如果二級緩存命中,則以此數(shù)據(jù)作為結(jié)果返回。
如果數(shù)據(jù)滿足以下條件,則可將其納入緩存管理
1、數(shù)據(jù)不會被第三方應(yīng)用修改
2、數(shù)據(jù)大小在可接受的范圍之內(nèi)
3、數(shù)據(jù)更新頻率較低
4、同一數(shù)據(jù)可能會被系統(tǒng)頻繁引用
5、非關(guān)鍵數(shù)據(jù)(關(guān)鍵數(shù)據(jù),如金融賬戶數(shù)據(jù))
Hibernate本身并未提供二級緩存的產(chǎn)品化實(shí)現(xiàn)(只是提供了一個(gè)基于Hashtable的簡單緩存以供調(diào)試),而是為眾多的第三方緩存組件提供了接入接口,我們可以根據(jù)實(shí)際情況選擇不同的緩存實(shí)現(xiàn)版本。
只有注冊用戶登錄后才能發(fā)表評論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||
相關(guān)文章:
|
||
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
29 | 30 | 1 | 2 | 3 | 4 | 5 | |||
6 | 7 | 8 | 9 | 10 | 11 | 12 | |||
13 | 14 | 15 | 16 | 17 | 18 | 19 | |||
20 | 21 | 22 | 23 | 24 | 25 | 26 | |||
27 | 28 | 29 | 30 | 31 | 1 | 2 | |||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
常用鏈接
留言簿(1)
隨筆分類
- EJB學(xué)習(xí)筆記(13)
- HIBERNATE(25)
- J2SE(1)
- JAVASCRIPT
- SOA
- SPRING(16)
- WEBWORK
- 人生隨筆(7)
- 開發(fā)實(shí)踐
- 設(shè)計(jì)思想(4)
- 財(cái)經(jīng)新聞
隨筆檔案
關(guān)注blogs
- Anders小明的Blog
- DWR學(xué)習(xí)手冊
- IBM解決方案
- j2ee api
- JavaEye Java
- java技術(shù)賽迪網(wǎng)
- jdk詳解
- J道論壇
- mldn解惑
- robbin的自言自語
- SpringFramework中文論壇
- validation詳細(xì)解釋
- 一只小螞蟻
- 中國it實(shí)驗(yàn)室
- 啊密果
- 當(dāng)當(dāng)網(wǎng)
- 林信良學(xué)習(xí)筆記
- 灰狐動力
- 鼠標(biāo)的咖啡屋
搜索
最新評論

- 1.?re: 心中的那個(gè)她[未登錄]
- 如果心情能那么容易放開就好了,碰到她是我的緣分,但是她的緣分不知道在哪里。
- --王永慶
- 2.?re: 心中的那個(gè)她[未登錄]
- 兄弟,喜歡就大膽去追好了,就是因?yàn)橄矚g才會有不愉快,如果想一輩子沒有這些煩惱,找一個(gè)可有可無的人就好了。這種事講的是緣分吧。別人對你好不好其實(shí)不太重要。放開心情就好了。
- --萍水相逢
- 3.?re: 心中的那個(gè)她
- 只能同甘不能共苦,就他媽算了吧,程序員也是人啊!我現(xiàn)在也很討厭女的不理解人情。
- --咖啡妝
- 4.?re: 難以割舍的那份情感
- 評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
- --王永慶
- 5.?re: 難以割舍的那份情感
- 評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
- --隔葉黃鶯