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