मेरे पास स्प्रिंग डेटा जेपीए (हाइबरनेट बैकएंड) रिपॉजिटरी कक्षाओं के साथ एक स्प्रिंग बूट ऐप है। मैंने कुछ कस्टम खोजक विधियों को जोड़ा है, कुछ विशिष्ट @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
सक्षम करता हूं तो यह डेटा वहां कैश हो जाता है और हाइबरनेट क्वेरी निष्पादित नहीं करता है। लेकिन जब मैं क्वेरी कैशिंग अक्षम करता हूं, तो यह कैश नहीं होता है। मुझसे यहां क्या गलत हो रहा है? कृपया सहायता कीजिए!
'@ कैश' एनोटेशन किसी गैर इकाई के लिए कुछ क्यों करना चाहिए? यह एनोटेशन इकाइयों पर मनमाने ढंग से कक्षाओं या इंटरफेस पर नहीं है। –
मैं इसे समझने की कोशिश कर रहा हूं ... इसलिए किसी भी मदद की सराहना की जाएगी। अन्य ढूंढें ... स्प्रिंग द्वारा रनटाइम पर बनाए गए पेजिंग एंड सोर्सिंग रिपोजिटरी में निर्दिष्ट विधियां जेपीए/हाइबरनेट के दूसरे स्तर के कैशिंग का उपयोग करके कैशिंग प्रदान करती हैं। यह ठीक से काम करता है। लेकिन मैंने यह खोजक तरीका बनाया है, मैं यह नहीं समझ सकता कि आईटी को कैश कैसे प्राप्त किया जाए ... –
मुझे संदेह है कि 'findAll' कैशिंग है जब तक कि आप अपनी संस्थाओं पर नॉटेशन न हो (जहां उन्हें जाना चाहिए)। यदि आप एक गैर-कैश करने योग्य इकाई को कैश करने की कोशिश कर रहे हैं (या उम्मीद कर रहे हैं) यह काम नहीं करेगा, केवल उस मामले में क्वेरी कैश काम करेगा। –