У меня есть приложение загрузки Spring с Spring хранилищами данных JPA (hibernate backend). Я добавил несколько пользовательских методов поиска, некоторые с конкретной аннотацией @Query
, чтобы рассказать, как получить данные. Я уже настроил EhCache для спящего режима 2-го уровня, но до сих пор единственный способ получить эти кеширование результатов - включить кеш-память спящего режима. Я бы предпочел определить конкретный кеш и сохранить реальные объекты домена там, как если бы это был обычный искатель. Ниже приведен код моего репо:
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
, тогда эти данные будут кэшироваться там, а спящий режим не выполнит запрос. Но когда я отключу кеширование запросов, это не кэшируется. Что я здесь делаю неправильно? ПОЖАЛУЙСТА, ПОМОГИТЕ!