剛開始的時候覺得這個快照區很難理解,網路上看了很多部落格之後,開始明白了。我是結合ADO.NET 理解的,在ADO.NET 中有一個類,
叫SqlCommandBuilder,在我看來,他就是ADO.NET 中和Hibernate 快照區對應的東西,這個SqlCommandBuilder 可以構建SQL 語句,當呼叫Update 方法之後,可以將資料庫中的資訊更新(包括更新和刪除),其中還必不可少的一個枚舉類,就是行狀態位RowState類,我將這個行狀態位元和Hibernate的對比(對比快取區和快照區)當成對應。只不過,當刷新快取區時,Hibernate 它做了一個比對快取區和快照區的內容(如果發現不同,就更新快照區,並儲存一條updata 的SQL 語句,如果執行的不是刷新操作,而是提交事務操作,那麼不僅會儲存這個updata語句,還會發送到資料庫執行這個updata 的SQL),而ADO.NET 沒有進行比對,而是進行了記錄(即改變了該行的RowStae 值),最後SqlCommandBuilder 根據這個狀態位和主鍵,更新到資料庫,其實,在某種角度下,比對也是一種做記錄(和修改行狀態位元類似),直到提交事務,就更新到資料庫。
加上一句,快照我理解為資料庫的快照(最初是資料庫某些行的的快照,然後一餐操作,這時就不再是資料庫的快照了,但提交交易後,又成了資料庫的一部分行的快照了。 #】
還有這個類別【RowSate類別
】也許我講的不夠明白,但目前的理解就是這樣。
以上是Hibernate 中一級快取和快照區的理解的詳細內容。更多資訊請關注PHP中文網其他相關文章!