如何在不使用查询缓存的情况下缓存Spring Data JPA查询方法的结果?
我有一个带有Spring Data JPA(休眠后端)存储库类的Spring Boot应用程序。我添加了几个自定义查找器方法,其中一些带有特定的注释,以告诉它如何获取数据。我已经为休眠 2nd 级缓存设置了 EhCache,但到目前为止,获得这些结果缓存的唯一方法是启用休眠查询缓存。我更喜欢定义一个特定的缓存,并将实际的域对象存储在那里,就像它是一个普通的查找器一样。以下是我的回购代码:@Query
public interface PromotionServiceXrefRepository extends PagingAndSortingRepository<PromotionServiceXref, Integer> {
@Query("SELECT psx FROM Customer c " +
"JOIN c.customerProductPromotions cpp " +
"JOIN cpp.productPromotion pp " +
"JOIN pp.promotion p JOIN p.promotionServiceXrefs psx " +
"WHERE c.customerId = ?1")
@QueryHints(@QueryHint(name = "org.hibernate.cacheable", value = "true"))
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY, region = "promotionServiceXrefByCustomerId")
Set<PromotionServiceXref> findByCustomerId(int customerId);
}
这是我定义的“promotionServiceXrefByCustomerId”缓存,它没有被使用:
<cache name="promotionServiceXrefByCustomerId" overflowToDisk="true" diskPersistent="true"
maxEntriesLocalHeap="3000000" eternal="true" diskSpoolBufferSizeMB="20" memoryStoreEvictionPolicy="LFU"
transactionalMode="off" statistics="true">
</cache>
我做错了什么?如果我启用,则此数据将缓存在那里,并且休眠不会执行查询。但是当我禁用查询缓存时,这不会被缓存。我在这里做错了什么?请帮忙!StandardQueryCache