1. 程式人生 > >深入理解Hibernate的一級快取和快照

深入理解Hibernate的一級快取和快照

hibernate分為:
一級快取也就是 Session 級別的快取,它是屬於事務範圍的快取
二級快取也就是 SessionFactory 級別的快取,它是屬於程序範圍的快取
session的一級快取
使用hibernate進行查詢的時候,將查詢結果放置到session的一級快取中,在一級快取中存在物件,物件使用屬性的OID的值進行區分,此時再使用相同的OID進行查詢的時候,首先會在session一級快取中進行查詢是否存在相同的OID
如果存在相同的OID,此時不再查詢資料庫,而是直接使用一級快取中存在的物件
如果沒有存在相同的OID,此時再查詢資料庫,將查詢得到的結果資料再放置到session一級快取中

目的:減少訪問資料庫的次數

session的快照
使用id進行查詢資料庫,將查詢得到的結果放置到session一級快取中,同時複製一份資料,放置到session的快照中
當使用tr.commit()的時候,同時清理session的一級快取(flush)
當清理session一級快取的時候,會使用OID判斷一級快取中物件和快照中的物件進行比對
如果2個物件(一級快取的物件和快照的物件)中的屬性發生變化,則執行update語句,此時更新資料庫,更新成一級快取中的資料
如果2個物件中的屬性不發生變化,此時不執行update語句

目的:確保和資料庫中的資料一致