查询缓存不适用于规范?

时间:2018-04-20 06:43:25

标签: hibernate spring-data-jpa criteria query-cache specification-pattern

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

  1. 扩展JpaRepository
  2. 2a上。它与我的HQL查询一起使用query.setHimt(“org.hibernate.cacheable”,true);

    如果

    ,则不起作用
    1. 我将结果与其他类包装在一起,例如Page<>
    2. 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&lt;&gt;。 我可以使用Hibernate和ehcache缓存规范查询吗?

0 个答案:

没有答案