1

我想为某些学习目的配置没有二级缓存的查询缓存,因为我已经读过它可以完成,但不知何故,查询缓存仅适用于二级缓存。

这是我的配置

<property name="cache.use_query_cache">true</property>

实体类是

@Entity
public class Company {}

但是当我这样做的时候

session = factory.openSession();
Query getQuery=session.createQuery("from Company  where companyId=1");
getQuery.setCacheable(true);
Object company2 = getQuery.uniqueResult();
session.close();

session = factory.openSession();
getQuery=session.createQuery("from Company  where companyId=1");
getQuery.setCacheable(true);
company2 = getQuery.uniqueResult();
session.close();

两个单独的查询被触发。

我一做

@Entity
@Cacheable
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Company {}

查询缓存工作,但它也启用二级缓存。那么如何在不开启二级缓存的情况下配置查询缓存呢?

4

1 回答 1

2

查询缓存需要二级缓存来完成它的工作,因为查询的结果是从二级缓存中检索的。查询缓存只跟踪查询和查询返回的 id 集。然后从二级缓存中检索这些 ID,以进一步提高速度。你在哪里读到你可以有没有二级缓存的查询缓存?

于 2014-05-12T12:10:14.863 回答