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

经验分享 程序员 微信小程序 职场和发展