हम हाइबरनेट 4 और ehcache हमारी परियोजना में उपयोग कर रहे हैं। हम ज्यादातर अपरिवर्तनीय वस्तुओं पर काम करते हैं, इसलिए कैशिंग एक ऐसी सुविधा है जो हमारे आवेदन में अच्छी तरह से फिट बैठती है। क्वेरी कैश सक्षम करने का प्रयास करते हैं, हम निम्नलिखित समस्या में पड़ गए:हाइबरनेट कैश: क्या एल 2 कैश में संग्रहीत कैश किए गए क्वेरी द्वारा ऑब्जेक्ट लौटाए जाते हैं?
मान लिया जाये कि हम निम्न इकाई है:
@Entity
@Table(name = "DOGS")
@Immutable
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
class Dog {
@Id @Column
Long id;
@Column
String name;
}
और क्वेरी:
Criteria criteria = session.createCriteria(Dog.class);
criteria.add(Restrictions.in("id", ids));
criteria.setCacheable(true);
क्वेरी कैश timeToLive पर सेट है कुत्ते के समय के बारे में 3/4। यहाँ परिदृश्य है (कृपया मुझे सही कर अगर मैं एक गलत धारणा बना):
- पहली बार (कैश रिक्त है यह सोचते हैं) क्वेरी कहा जाता है, यह मार डाला जाता है और वापस आ कुत्ता उदाहरणों दूसरे स्तर में जमा हो जाती है कैश। इसके अलावा, डॉग आईडी क्वेरी कैश में संग्रहीत हैं।
- दूसरी बार क्वेरी कहलाती है (कुत्ते आईडी क्वेरी कैश में हैं और कुत्ते की वस्तुएं एल 2 कैश में हैं), सब कुछ ठीक काम करता है। क्वेरी कैश आईड्स देता है और कुत्तों को एल 2 से लाया जाता है।
- जब क्वेरी कैश समाप्त हो जाता है (लेकिन एल 2 कैश अभी भी मान्य है), क्वेरी फिर से चलती है और कुत्ते के आईडी को कैश करती है।
- अब एल 2 कैश कुत्ते ऑब्जेक्ट के लिए समाप्त हो जाता है और सभी वस्तुओं को कैश से निकाल दिया जाता है। क्वेरी कैश में अभी भी कैड्स कैश किए गए हैं, इसलिए हाइबरनेट डॉग ऑब्जेक्ट्स एक को से प्राप्त करता है, जो हमेशा के लिए लेता है।
तीसरा बिंदु मुझे परेशान कर रहा है। क्वेरी कैश को अमान्य हो गया और डेटाबेस पर फिर से चलाया गया, कुत्ते की वस्तुओं को लाया, लेकिन कुत्ते की वस्तुओं को एल 2 कैश में अपडेट नहीं किया गया था। ऐसा लगता है कि क्वेरी ने केवल क्वेरी कैश में कुत्ते आईडी को अपडेट किया है, लेकिन एल 2 कैश नहीं।
क्या एल 2 कैश को अपडेट करने के लिए क्वेरी को मजबूर करने का कोई तरीका है? शायद इस परिदृश्य को अलग-अलग संभाला जाना है?
आप पढ़ सकते हैं सक्षम कर सकते हैं/कैश मोड लिखें, ताकि अपडेट के मामले में ईएच कैश इसका ख्याल रखे। – Phani
इकाई केवल पढ़ी जाती है, जिससे इससे मदद नहीं मिलेगी। –