CriteriaQuery 设置可缓存

Posted

技术标签:

【中文标题】CriteriaQuery 设置可缓存【英文标题】:CriteriaQuery set cacheable 【发布时间】:2017-10-06 07:36:04 【问题描述】:

我知道我们可以使用 query.setHint("org.hibernate.cacheable", true) 为查询设置休眠缓存,如下例所示。但是,有谁知道 CriteriaQuery 而不是 Query 的任何方法?

Query query = entityManager.createQuery("from " + Employee.class.getName());
query.setHint("org.hibernate.cacheable", true);
return query.getResultList();

【问题讨论】:

【参考方案1】:

如果您有 CriteriaQuery,您可以轻松地将其转换为“常规”查询。

...
c.select(root).where(p);
Query<MyEntity> regularQuery = this.currentSession().createQuery(c);
regularQuery.setHint("org.hibernate.cacheable", true);
return regularQuery.getResultList();

【讨论】:

【参考方案2】:

对于CriteriaQuery,您可以将CriteriaQuery 对象类型转换为从javax.persistence.Query package 查询,如下所示:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
javax.persistence.criteria.CriteriaQuery query = cb.createQuery();

((Query)query).setHint("org.hibernate.cacheable", true);

【讨论】:

以上是关于CriteriaQuery 设置可缓存的主要内容,如果未能解决你的问题,请参考以下文章

混合 JPQL 和 CriteriaQuery

如何动态创建 CriteriaQuery

向 JPA CriteriaQuery 添加连接

如何将 JPA 调整为 Criteriaquery

如何使用 CriteriaQuery 生成“select count(*) ...”

CriteriaQuery 抽象类列表