我需要有关在休眠框架中缓存查询的帮助。我已经设置了波纹管属性,并且在我的项目中正在缓存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();
}
答案 0 :(得分:0)
根据this site,如果您尝试缓存查询结果而不是对象,则语法是这样的:
entityManager.createQuery("select f from Foo f")
.setHint("org.hibernate.cacheable", true)
.getResultList();
只要您配置了休眠查询缓存(您可以这样做),它就可以工作。