Hibernate 查询缓存不符合规范?

Hibernate 查询缓存不符合规范?,hibernate,spring-data-jpa,criteria,query-cache,specification-pattern,Hibernate,Spring Data Jpa,Criteria,Query Cache,Specification Pattern,我的项目是springboot+springdatajpa+hibernate+ehcache。 二级缓存与以下各项一起工作: 扩展JPA假设 2a。它使用query.setHimt(“org.hibernate.cacheable”,true)处理我的HQL查询 如果 我用其他类包装结果,例如Page 2b。如果我使用规范和条件来查询而不是HQL 2a和2b的设置相同。假设我的实体类是城市。我使用的规范如下: CriteriaBuilder build = em.getCriteriaBuil

我的项目是springboot+springdatajpa+hibernate+ehcache。 二级缓存与以下各项一起工作:

  • 扩展JPA假设
  • 2a。它使用query.setHimt(“org.hibernate.cacheable”,true)处理我的HQL查询

    如果

  • 我用其他类包装结果,例如Page
  • 2b。如果我使用规范和条件来查询而不是HQL

    2a和2b的设置相同。假设我的实体类是城市。我使用的规范如下:

    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();
    
    CriteriaBuilder build=em.getCriteriaBuilder();
    CriteriaQuery=build.createQuery(City.class);
    Root=query.from(City.class);
    query.where(spec.toPredicate(root、query、build));
    TypedQuery tq=em.createQuery(查询);
    setHint(“org.hibernate.cacheable”,true);
    返回tq.getResultList();
    
    结果集是正确的,对象列表与HQL相同。但若我在循环中调用这个方法,它每次都会从数据库中检索

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