Hibernate 中一級快取和快照區的理解

2022-03-18 10:03:23 字數 787 閱讀 1605

剛剛開始的時候覺得這個快照區很難理解,在網上看了很多部落格之後,開始明白了。我是結合 ado.net 理解的,在ado.net 中有乙個類,

叫 sqlcommandbuilder,在我看來,他就是 ado.net 中和 hibernate 快照區對應的東西,這個 sqlcommandbuilder 可以構建 sql 語句,並且當呼叫update 方法之後,可以將資料庫中的資訊更新(包括更新和刪除),其中還必不可少的乙個列舉類,就是行狀態位 rowstate類,我將這個行狀態位和hibernate 的對比(對比快取區和快照區)當成對應。只不過,當重新整理快取區時,hibernate 它做了乙個比對快取區和快照區的內容(如果發現不同,就更新快照區,並儲存一條 updata 的 sql 語句,如果執行的不是重新整理操作,而是提交事務操作,那麼不僅會儲存這個updata語句,還會傳送到資料庫執行這個updata 的 sql),而 ado.net 沒有進行比對,而是進行了記錄(即改變了該行的 rowstae 值),最後 sqlcommandbuilder 根據這個狀態位和主鍵,更新到資料庫,其實,在某種角度下,比對也是一種做記錄(和修改行狀態位類似),直到提交事務,就更新到資料庫。

加上一句,快照我理解為資料庫的快照(最初是資料庫某些行的的快照,然後一頓操作,這時就不再是資料庫的快照了,但提交事務後,又成了資料庫的一部分行的快照了。)

關於sqlcommandbuilder可以看這篇部落格【

sqlcommandbuilder類

】還有這個類【

rowsate類

】也許我講的不夠明白,但是目前的理解就是這樣。

Hibernate 一級快取

1.session級別的快取,同session繫結,生命週期和session相同,當session銷毀,它也清除。管理以及快取的方法有clear evict clear清除session快取,evict將某個物件清除快取,相當於成為游離態detached。2.是實體級別的快取,只有在查詢物件級別的時...

Hibernate 一級快取

1.快取 hibernate中也存在快取.hibernate中存在的快取也是用來提高效率.2.hibernate中存在兩種快取 1 執行緒級別的快取.session快取 2 程序級別的快取.hibernate 二級快取 3.session快取 就是session物件中存在的快取.快取中存在的是 持久...

hibernate 一級快取

若 號碼中已經有這個號碼,那麼將它的擴充套件碼自動增加1,以保證每次傳送的 號碼加擴充套件碼組成唯一號碼 public synchronized void updateextcode string phonenumber throws exception 專案中一段邏輯是 1 通過 手機號 字段找到...