启用查询缓存

时间:2018-06-28 18:46:33

标签: hibernate caching

我需要有关在休眠框架中缓存查询的帮助。我已经设置了波纹管属性,并且在我的项目中正在缓存l2。

<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>

我对实体使用批注,并且在获取任何MyClass对象缓存时都可以正常工作。当我从下面的接口使用getOnlyNames方法时,查询缓存不起作用。是否可以为返回例如的方法启用查询缓存。字符串列表(不是实体列表,仅是所选字段)?

@Entity
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class MyClass {
    @Id
    private long id;
    private long name;
}

界面

@Repository
@RepositoryRestResource(exported = false)
public interface MyClassRepository extends JpaRepository<Category, Long> {
(...)
@Cacheable("getOnlyNames")
@Query("select m.name from MyClass m")
List<String> getOnlyNames(); 

}

1 个答案:

答案 0 :(得分:0)

根据this site,如果您尝试缓存查询结果而不是对象,则语法是这样的:

entityManager.createQuery("select f from Foo f")
  .setHint("org.hibernate.cacheable", true)
  .getResultList();

只要您配置了休眠查询缓存(您可以这样做),它就可以工作。