在Java語(yǔ)言中,對(duì)象之間的比較可以通過引用比較(==)和內(nèi)容比較(equals)兩種方式進(jìn)行,而在Hibernate的實(shí)體對(duì)象的比較是通過主鍵值來比較,如果要實(shí)現(xiàn)自己的識(shí)別邏輯,則需要重寫equals方法和hashCode方法。
檢查數(shù)據(jù)對(duì)象改變檢查的一般策略有下面兩種:
1. 數(shù)據(jù)對(duì)象監(jiān)控
數(shù)據(jù)對(duì)象監(jiān)控的實(shí)現(xiàn)方式,通過攔截器對(duì)數(shù)據(jù)對(duì)象的設(shè)值方法進(jìn)行攔截。一旦數(shù)據(jù)對(duì)象的設(shè)置方法被調(diào)用,則將其標(biāo)志為“待更新”狀態(tài),之后在數(shù)據(jù)庫(kù)操作時(shí)將其更新到對(duì)應(yīng)的庫(kù)表。
2. 數(shù)據(jù)版本對(duì)比
在持久層框架中維持?jǐn)?shù)據(jù)對(duì)象的最近讀取版本,當(dāng)數(shù)據(jù)提交時(shí)將提交數(shù)據(jù)與此版本進(jìn)行比對(duì),如果發(fā)生變化則將其同步到數(shù)據(jù)庫(kù)對(duì)應(yīng)的庫(kù)表。
Hibernate采取的是第二種檢查策略。它采用一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu)"EntityEntry"保存對(duì)應(yīng)實(shí)體類的狀態(tài)信息。
對(duì)于級(jí)聯(lián)對(duì)象的更新,Hibernate將根據(jù)unsaved-value進(jìn)行判定。首先Hibernate會(huì)取出目標(biāo)對(duì)象的id。之后,將此值與unsaved-value進(jìn)行比對(duì),如果相等,則認(rèn)為目標(biāo)對(duì)象尚未保存,否則,認(rèn)為對(duì)象已經(jīng)保存,無需再進(jìn)行保存操作。
posted on 2005-06-22 16:32
小米 閱讀(5159)
評(píng)論(4) 編輯 收藏 所屬分類:
Hibernate