2009-06-01 11 views
5

मैं हाइबरनेट दूसरे स्तर कैश उपयोग कर रहा हूँ अपने आवेदन में, विशेष व्यावसायिक कारण के लिए मैं इकाई एनोटेशन किसी भी अधिक नहीं बदल सकते हैं बिना हाइबरनेट में कुछ कुछ संस्थाओं के दूसरे स्तर कैश अक्षम कर सकते हैं।मैं कैसे बदल रहा है एनोटेशन

मेरी परियोजना में, हाइबरनेट से डेटाबेस को बदलने के अलावा, अन्य देशी एसक्यूएल भी मौजूद हैं जो हाइबरनेट से नहीं जाते हैं। इसलिए, मूल SQL से डेटाबेस अद्यतन होने के बाद हाइबरनेट द्वितीय-स्तरीय कैश डेटा बाँध सकता है। यही कारण है कि मैं कुछ इकाइयों के लिए दूसरे स्तर के कैश को अक्षम करने के लिए चाहता हूं (प्रोग्रामेटिक रूप से या एनोटेशन बदलने से अन्य तरीके)।

अग्रिम धन्यवाद!

उत्तर

7

चेतावनी: रूप जेन्स Schauder बताया गया है, यह ehcache कॉन्फ़िगर करने के लिए maxElementsInMemory = "0" विपरीत प्रभाव के रूप में यह प्रभावी रूप से का कारण बनता है की स्थापना द्वारा स्मृति में 0 तत्वों स्टोर करने के लिए असंभव है - कैश के लिए असीमित आकार तय करता है। Hibernate Caching पृष्ठ पर इस व्यवहार का उल्लेख नहीं किया गया है, लेकिन Cache Configuration पृष्ठ पर प्रलेखित है।

मैंने दस्तावेज़ों की तुरंत समीक्षा की है और अभी तक वैकल्पिक दृष्टिकोण नहीं मिला है। मैं अपने द्वारा इस जवाब को हटाने में असमर्थ हूं। :-(

मेरी मूल सुझाव:। आप

आप कम टीटीएल बार करने के लिए दूसरे स्तर कैश के कार्यान्वयन प्रदाता कॉन्फ़िगर कर सकते हैं और/या विशेष इकाई प्रकार के 0 प्रविष्टियां संगृहीत

जैसे अगर ehcache का उपयोग कर रहे हैं, तो आप इसे ehcache.xml में कॉन्फ़िगर कर सकते हैं: *

<cache 
name="com.problematic.cache.EntityName" 
maxElementsInMemory="0" <<== this should effectively disable caching for EntityName 
overflowToDisk="false" <<== Do not overflow any entries to disk 
/> 

Hibernate Caching देखें ehcache दस्तावेज में

+0

धन्यवाद मातेज, मुझे लगता है कि यह वही जवाब है जो मैं चाहता था! मेरे पास एक और समस्या है, मेरा ehcache.xml मेरे रननेबल प्रोजेक्ट के क्लास पथ में रखा गया है जबकि इकाई वर्ग किसी अन्य इकाई प्रोजेक्ट में रखा गया है। ऐसा लगता है कि हाइबरनेट केवल मेरे ehcache.xml से डिफ़ॉल्ट कैश सेटिंग पढ़ता है। जो है: हाइबरनेट नहीं पढ़ता मेरी अन्य संस्था ehcache.xml में कैश सेटिंग्स। –

+0

मुझे लगता है कि <कैश नाम = "business.entity में।कार " maxElementsInMemory =" 10000 " अनन्त =" false " timeToIdleSeconds =" 1800 " timeToLiveSeconds =" 100000 " overflowToDisk =" false " /> , नाम विशेषता सही ढंग से तो सेट नहीं है हाइबरनेट नहीं कर सकते इस सेटिंग को पढ़ने और डिफ़ॉल्ट का उपयोग करने के लिए उपयोग करें। मुझे नाम विशेषता में क्या लिखना चाहिए? –

+0

हाइबरनेट अपने इकाई के नाम से ऑब्जेक्ट के लिए कैश की पहचान करता है। डिफ़ॉल्ट श्रेणी का नाम इकाई नाम के रूप में उपयोग किया जाता है, लेकिन इसे हाइबरनेट मैपिंग फ़ाइलों में बदला जा सकता है (या एनोटेशन)। यदि आपने हाइबरनेट मैपिंग में इकाई का नाम नहीं बदला है, तो आपको बस पूरी तरह से योग्य क्लास नाम का उपयोग करना चाहिए। अन्यथा हाइबरनेट मैपिंग में स्पष्ट रूप से निर्दिष्ट (प्रतीकात्मक) इकाई नाम का उपयोग करें। – Matej

1

टेराकोटा 3.1 और उसके बाद में, आप टेराकोटा डेवलपर कंसोल का उपयोग करते हुए कॉन्फ़िगरेशन (स्थिर रूप से) और रनटाइम दोनों में प्रति क्षेत्र आधार पर हाइबरनेट द्वितीय स्तर के कैश को सक्षम/अक्षम कर सकते हैं।

आप क्लस्टर या क्लस्टर-व्यापी में व्यक्तिगत नोड्स के लिए कैश और हाइबरनेट के रीयलटाइम आंकड़ों पर भी निगरानी कर सकते हैं।

टेराकोटा खुला स्रोत है। अधिक जानकारी के लिए, Terracotta for Hibernate देखें।

संबंधित मुद्दे