理解Session緩存
session的緩存有兩大作用
(1)減少訪問數據庫的頻率。應用程序從內存中讀取持久化對象的速度顯然比到數據庫中查詢數據的速度快多了,音系Session的緩存
可以提高數據庫訪問性能
(2)保證緩存中的對象與數據庫中的相關記錄保持同步,位於緩存中的對象被稱為持久化對象。當緩存中持久化對象的狀態發生了變換,Session並不會立即執行相關的sql語句,這使得Session能夠把幾條相關的sql語句並為一條sql語句,以便減少訪問數據庫的次數,從而提高應用程序的性能,以下程序代碼對Customer的name屬性修改了兩次:
當Session清理緩存時,只需執行一條update語句:
(3)當緩存中的持久化對象之間存在循環關聯關系時,Session會保證不出現訪問對象圖的死循環,以及由死循環引起的JVM堆棧溢出異常。
Session在清理緩存時,按照以下順序執行sql語句
按照應用程序調用的session.save()方法的先後順序,執行所有對實體進行插入的insert語句
執行所有對實體進行更新的 update語句
執行所有對集合進行刪除的delete語句
執行所有對集合元素進行刪除,更新,插入的sql語句
執行所有對集合進行插入的insert語句
按照應用程序調用session.delete()方法的先後順序,執行所有對實體進行刪除的delete語句
下圖列出了三種清理模式執行清理操作的時間點
FlushMode.AUTO是默認值,這也是優先考慮的清理模式,它會保證在整個事務中,數據保持一致。如果事務僅包含查詢數據庫的操作,而不會修改數據庫的數據,也可以選用FlushMODE.COMMIT模式,這個可以避免在執行Session的查詢方法時先清理緩存,以稍微提高應用程序的性能。
文章內容摘自《精通Hibernate(孫衛琴)》
理解Session緩存