hibernate中的一級快取的底層是以map形式存在的,key是主鍵,value是物件,所以它的泛型為map,key的泛型為序列化是因為主鍵都可被序列化。簡單說完一級快取的底層原理,下面開始講快照問題。
當程式呼叫get()方法時,session會先在快取區找有沒有存在對應的物件,如果是第一次呼叫,這時快取區是空的,自然就找不到,那麼session就會傳送select語句向資料庫查詢,資料庫找到後將結果返回給session,這時session會對資料進行組裝成實體物件,並且一式兩份,即乙份在快取中,乙份是快照,然後session會將快取中的那乙份返回給程式;如果這時進行更新操作,那麼在session中會進行對比快取中的物件與快照中的物件,如果物件的屬性發生了變化,那麼就會傳送update語句對資料庫進行更新,如果物件的屬性沒有變化,則不傳送update語句。
總結,快照是資料庫的資料在session中的代表,也就是說,資料庫中的資料一旦發生變化,快照就會隨之改變。個人覺得這樣設計能減少對資料庫的訪問,提高資料庫的效率。
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 通過 手機號 字段找到...