3

我的项目是 Spring-boot + Spring-data-jpa + hibernate + ehcache。二级缓存适用于以下内容:

  1. 扩展 JpaRepository

2a。它与我的 HQL 查询一起使用 query.setHimt("org.hibernate.cacheable", true);

它不起作用,如果

  1. 我用其他类包装结果,例如 Page<>

2b。如果我使用规范和标准来查询而不是 HQL

我的设置对于 2a 和 2b 都是一样的。假设我的实体类是 City。我像这样使用规范:

CriteriaBuilder build = em.getCriteriaBuilder();
CriteriaQuery<City> query = build.createQuery(City.class);
Root<city> root = query.from(City.class);
query.where(spec.toPredicate(root,query,build));
TypedQuery<City> tq = em.createQuery(query);
tq.setHint("org.hibernate.cacheable", true);
return tq.getResultList();

结果集是正确的,对象列表与 HQL 相同。但是如果我在循环中调用这个方法,它每次都会从数据库中检索。

我不明白,HQL 和规范都会生成 TypedQuery<>。我可以使用 Hibernate 和 ehcache 缓存规范查询吗?

4

0 回答 0