Hibernate缓存——查询缓存

Hibernate缓存——查询缓存

默认情况下关闭设置的缓存对HQL和QBC查询时无效,需要打开查询缓存。

查询缓存依赖于二级缓存。



1.设置

         true



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);

你可能感兴趣的:(java,Hibernate4)