Spring Data JPA (hazırda bekletme arka uç) veri havuzu sınıflarıyla bir Spring Boot uygulamasına sahibim. Bazı özel bulucu yöntemlerini ekledim, bazılarının verileri nasıl alacağını anlatmak için bazı özel @Query
ek açıklamaları ekledim. Hazırda bulunan 2. düzey önbellek için zaten EhCache'i kurdum, ancak şu ana kadar bu önbelleğe alma sonuçlarını alabilmemin tek yolu, hazırda bekleyen sorgu önbelleğini etkinleştirmektir. Belirli bir önbellek tanımlamayı ve gerçek etki alanı nesnelerini sanki normal bir bulucu gibi depolamayı tercih ederim. Aşağıda benim Repo kodudur:Sorgu önbelleğini kullanmadan bir Spring Data JPA sorgu yönteminin sonuçlarını nasıl önbelleğe alırım?
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);
}
Ve burada tanımlanan "promotionServiceXrefByCustomerId" önbellek, yani kullanılan DEĞİLDİR: Neyi yanlış yapıyorum
<cache name="promotionServiceXrefByCustomerId" overflowToDisk="true" diskPersistent="true"
maxEntriesLocalHeap="3000000" eternal="true" diskSpoolBufferSizeMB="20" memoryStoreEvictionPolicy="LFU"
transactionalMode="off" statistics="true">
</cache>
? StandardQueryCache
'u etkinleştirirsem, bu veri oraya önbelleğe alınır ve hazırda bekletme bir sorgu yürütmez. Ancak sorguyu önbelleğe almayı devre dışı bıraktığımda, bu önbelleğe alınmaz. Burada neyi yanlış yapıyorum? LÜTFEN YARDIM ET!
Neden? Önbellek ek açıklamaları bir varlık için niçin herhangi bir şey yapmalıdır? Bu açıklama, keyfi sınıflar veya arayüzler üzerinde olmayan varlıklar üzerinde olmalıdır. –
Bunu anlamaya çalışıyorum ... böylece herhangi bir yardım takdir edilecektir. Diğer çalışma ... Spring tarafından çalışma zamanında oluşturulan PagingAndSortingRepository'de belirtilen yöntemler, JPA/Hibernate'in 2. düzey önbellekleme kullanılarak önbellekleme sağlar. Bu düzgün çalışıyor. Ancak, bu bulucu yöntemini oluşturduğumda, BT'yi nasıl önbelleğe alacağımı anlayamıyorum ... –
"FindAll" öğesi, varlıklarınız üzerinde ek açıklamaları önbelleğe almadıkça (ki nereye gitmeleri gerektiği) önbellek olduğundan şüpheliyim. Önbelleğe alınacak bir önbelleğe alınmayan öğeyi deniyorsanız (veya beklediyseniz) işe yaramazsa, yalnızca sorgu önbelleği bu durumda çalışacaktır. –