3 回答

TA貢獻1871條經驗 獲得超8個贊
這里有一些hibernate緩存的基本解釋......
第一級緩存與“會話”對象相關聯。緩存對象的范圍是會話。會話關閉后,緩存的對象將永遠消失。默認情況下啟用一級緩存,您無法禁用它。當我們第一次查詢實體時,它從數據庫中檢索并存儲在與hibernate會話相關聯的第一級緩存中。如果我們使用相同的會話對象再次查詢同一個對象,它將從緩存加載,并且不會執行sql查詢??梢允褂?code>evict()方法從會話中刪除加載的實體。如果已使用evict()
方法刪除該實體,則下一次加載此實體將再次進行數據庫調用。可以使用clear()
方法刪除整個會話緩存。它將刪除存儲在緩存中的所有實體。
二級緩存與第一級緩存不同,后者可在會話工廠范圍內全局使用。在會話工廠范圍中創建二級緩存,并且可以在使用該特定會話工廠創建的所有會話中使用。這也意味著一旦會話工廠關閉,與之關聯的所有緩存就會消失,緩存管理器也會關閉。每當hibernate會話嘗試加載一個實體時,它首先在第一級緩存中尋找實體的緩存副本(與特定的hibernate會話相關聯)。如果實體的緩存副本存在于第一級緩存中,則它將作為load方法的結果返回。如果第一級緩存中沒有緩存實體,則查找第二級緩存以獲取緩存實體。如果二級緩存具有緩存實體,則它將作為load方法的結果返回。但,在返回實體之前,它也存儲在第一級緩存中,以便下一次調用實體的加載方法將從第一級緩存本身返回實體,并且不需要再次進入二級緩存。如果在第一級緩存和第二級緩存中也找不到實體,則執行數據庫查詢并將實體存儲在兩個緩存級別中,然后作為響應返回load()
方法。
- 3 回答
- 0 關注
- 546 瀏覽
添加回答
舉報