天天看點

Hibernate緩存——查詢緩存Hibernate緩存——查詢緩存

Hibernate緩存——查詢緩存

預設情況下關閉設定的緩存對HQL和QBC查詢時無效,需要打開查詢緩存。

查詢緩存依賴于二級緩存。

1.設定

<propertyname="hibernate.cache.use_query_cache">

         true

</property>

2.在打開了查詢緩存之後,需要注意,調用query.list()操作之前,必須顯式調用query.setCachable(true)來辨別某個查詢使用緩存。

public void testQuery() {

         Queryquery = session.createQuery("from Emp");

         query.setCacheable(true);

         Listlist = query.list();

         System.out.println(list);

         Listlist2 = query.list();

         System.out.println(list2);

     }

時間戳緩存區域:

時間戳緩存區域存放了對于查詢結果相關的表進行插入,删除或更新操作的時間戳。

Hibernate通過時間戳緩存區域來判斷被緩存的查詢結果是否過期,過程如下:

T1時刻執行查詢操作,把查詢結果放在QueryCache區域,記錄該區域的時間戳為T1

T2時刻對查詢結果相關的表進行更新操作,hibernate把T2時刻存放在UpdateTimestampCache區域

T3時刻執行查詢前,比較T1,T2,如果T1>T2,直接從QueryCache區域擷取查詢結果,如果T2>T1,丢棄QueryCache資料,重新查詢資料庫,将資料放入QueryCache區域

Query query = session.createQuery("from Emp");

         query.setCacheable(true);

         Listlist = query.list();

         System.out.println(list);

         Empemp = (Emp)session.get(Emp.class, 1);

         emp.setOrderName("rrr");

         Listlist2 = query.list();

         System.out.println(list2);