查询的结果集也可以被缓存。只有当经常使用同样的参数进行查询时,这才会有些用处。
Query Cache中保存了之间查询操作执行过的Select SQL,以及由此查存产生的查询结果集(包括查询对象的类型和id);之后,如果再次发出查询请求时,Hibernate会根据查询的SQL从Query Cahce中检索,如果此SQL曾经执行过,则取出对应这个SQL所检索出来的结果集,再根据这个结果集中的对象类型和id,从缓存中取出对应的实体对象返回;
Query Cache中缓存的SQL及结果集并非一直存在,当Hibernate发现此SQL对应的库发生变动(Update/Delete/Insert),会自动将Query Cahce中对应表的SQL缓存废除。因此,Query Cahce只在特定的情况下使用;
- 完全的Select SQL重复执行
- 在两次查询之间,此Select SQL对应的表没有发生变动
但是,以上的两种情况限制比较严格,所以hibernate默认的是将其关闭,需要使用时候可以通过配置属性将其打开:
hibernate.cache.use_query_cache true
之后必须在Query的查询执行之前,将Query.Cacheable设为true:
Query query = session.createQuery(hql);
query.setCacheable(true);
分享到:
相关推荐
7:Hibernate查询缓存Query Cache及实现
如果启用查询缓存,还需添加`hibernate.cache.use_query_cache=true`。 二级缓存将数据视为一个Map,Key通常是实体的ID,Value是对应的实体对象。对于实体的读取,无论是通过list、load还是iterate,只要读取到一个...
如果在没有启用查询缓存时,使用`load()`方法获取的单个持久化对象会被缓存,但若想缓存`findAll()`, `list()`, `Iterator()`, `createQuery()`, `createCriteria()`等方法获取的结果集,必须设置`hibernate.cache....
`hibernate.cache.use_query_cache`和`hibernate.cache.use_second_level_cache`分别开启了查询缓存和二级缓存。最后,通过`class-cache`元素配置了`EntityClass`的缓存策略,这里使用了"read-write",表示读写操作...
### 深入理解Hibernate缓存 #### 一、Hibernate缓存概述 Hibernate作为一款流行的Java持久层框架,为开发者提供了高效且灵活的数据访问能力。其中,缓存机制是Hibernate性能优化的重要组成部分之一。理解Hibernate...
除了实体缓存,Hibernate还提供了查询缓存(QueryCache),用于缓存查询结果。查询缓存能够存储查询的标识以及对应的对象ID和类型。这样,当再次执行相同的查询时,Hibernate可以直接从缓存中获取结果,而不需要重新...
但是,可以通过设置`hibernate.cache.use_query_cache`来禁用查询缓存,防止对一级缓存造成影响。 ### 二级缓存 二级缓存是SessionFactory级别的,可以跨Session共享。相比一级缓存,二级缓存可以持久化存储,即使...
通过 `@NamedQuery` 或 `@SqlQuery` 注解定义的查询可以设置缓存。 6. **性能调优**:根据实际应用需求和性能测试结果,调整缓存大小、过期策略等参数,以达到最佳性能。 这个"hibernate5.1二级缓存包"可能包含了...
1. **Query.setFirstResult() 和 Query.setMaxResults()**:这是Hibernate原生的分页方式,`setFirstResult()` 设置从第几个结果开始,`setMaxResults()` 设置最多返回多少个结果。 2. **Criteria API的createAlias...
<property name="hibernate.cache.use_query_cache">true <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider 4.0配置如下: <property name="hibernate.cache.use_second_level_cache...
- **启用**:需通过 `hibernate.cache.use_query_cache` 配置,并确保第二级缓存已启用。 - **安全性**:注意,查询缓存不保证数据一致性,因为它可能在数据库更新后返回旧数据。 - **依赖性**:查询缓存依赖于实体...
– 设置Hibernate缓存提供者为EhCache –> <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider <!– 启用查询缓存 –> <property name="hibernate.cache.use_query_cache">true ``` 同时...
同时,如果要开启查询缓存,还需设置`hibernate.cache.use_query_cache=true`。 在二级缓存中,数据以Map的形式存储,Key通常为对象的ID,Value为对象实例。对于Class级别的缓存,当我们通过ID获取对象时,会首先...
SSH(Struts2、Spring、Hibernate)是一种经典的Java Web开发框架组合,用于构建高效、可扩展的Web应用程序。在这个项目中,"hibernate二级...这将是一个不错的实践项目,有助于理解SSH框架和Hibernate缓存的工作原理。
查询缓存(Query Cache)则是在特定查询结果集的基础上建立的缓存。当同样的查询被执行多次时,Hibernate会首先查看查询缓存,如果缓存中有结果,则直接返回,无需再次执行SQL。不过,查询缓存对数据一致性要求较高...
- **查询缓存**:若要使用查询缓存,还需要额外配置`hibernate.cache.use_query_cache`为`true`。 #### 三、二级缓存的工作原理 ##### 1. 缓存机制 - **Class缓存**:针对实体类的缓存,每个实体类都需要单独配置...
<property name="hibernate.cache.use_query_cache">true <property name="net.sf.ehcache.configurationResourceName">ehcache.xml ``` 3.3 在实体类上声明缓存 在实体类上使用`@Cacheable`和`@Cache`注解,指定...