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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值