2010-11-15 16 views
8


मेरा जावा ऐप हर 10 सेकंड में एक क्वेरी के लिए mysql सर्वर से पूछता है।
मैं तालिका में मैन्युअल रूप से एक नई पंक्ति डालता हूं।
और हाइबरनेट इसे नहीं ढूंढ सकता है।
जब भी मैं मैन्युअल रूप से एक पंक्ति को हटाता हूं, हाइबरनेट दिखाता है कि यह पंक्ति मौजूद है।
मेरा सुझाव है कि ऐसा इसलिए है क्योंकि हाइबरनेट कैशिंग।
क्या इसे अक्षम करने का कोई तरीका है?
धन्यवाद!पूरी तरह से हाइबरनेट कैशिंग अक्षम कैसे करें? (स्प्रिंग 3 के साथ, एनोटर्नेट एनोटेशन के साथ)

उत्तर

11

क्या आपका मतलब प्रथम स्तर का कैश या दूसरा-स्तर कैश है? Hibernate द्वितीय-स्तरीय कैश जैसे Ehcache है कि उसी तालिका में पंक्तियों के अनुरूप कैश इकाइयां जो मैन्युअल रूप से संशोधित करती हैं, वे आपके द्वारा वर्णित व्यवहार का कारण बन सकती हैं। प्रथम-स्तर के कैश इस व्यवहार का कारण नहीं बनेंगे, और मुझे नहीं लगता कि आप इसे अक्षम कर सकते हैं, वैसे भी।

हाइबरनेट द्वितीय-स्तरीय कैश को अक्षम करने के लिए, हाइबरनेट कॉन्फ़िगरेशन फ़ाइल, hibernate-cfg.xml से हटाएं, सभी पंक्तियां जो द्वितीय-स्तर के कैश को संदर्भित करती हैं। उदाहरण के लिए:

<!-- Enable the second-level cache --> 
<property name="hibernate.cache.provider_class"> 
    net.sf.ehcache.hibernate.EhCacheProvider 
</property> 
<property name="hibernate.cache.region.factory_class"> 
    net.sf.ehcache.hibernate.EhCacheRegionFactory 
</property> 
<property name="hibernate.cache.use_query_cache">true</property> 
<property name="hibernate.cache.use_second_level_cache">true</property> 
<property name="hibernate.cache.use_structured_entries">true</property>  
<property name="hibernate.cache.generate_statistics">true</property> 
+0

हाय डेरेक, धन्यवाद या आपके उत्तरों! एचएम, ऐसा लगता है कि मेरे पास दूसरे स्तर को हटाने की कोशिश करने के लिए दूसरा स्तर कैशिंग नहीं है? मैं यह कैसे कर सकता हूँ? – gennad

+0

जहां तक ​​मुझे पता है, आप पहले-स्तर के कैश को अक्षम नहीं कर सकते हैं, लेकिन http://stackoverflow.com/questions/3943366/how-can-i-configure-hibernate-to-immediately-apply-all-saves के अनुसार -अपडेट्स-एंड-डिलीट/3946939 # 3946939, स्प्रिंग पहले-स्तर के कैश की उत्सुक फ्लशिंग सक्षम कर सकता है, जो प्रभावी रूप से एक ही परिणाम प्राप्त करेगा। –

-1

आप hints.put ("javax.persistence.cache.retrieveMode", CacheRetrieveMode.BYPASS) का उपयोग कर सकते हैं; आपकी दृढ़ विधि() में यह काम कर सकता है।

1

प्रथम स्तर के कैश को अक्षम करने के लिए "कोशिश करें" करने के लिए, मैं इसे एंटीटीमेनगर से अनुरोध करता हूं कि हर बार इसे बेदखल कर दें। मेरे लिए काम किया;)

public EntityManager getEntityManager(){ 
     if(emf == null){ 
      if (parameters == null) { 
       emf = Persistence.createEntityManagerFactory(persistenceUnitName); 
      } else { 
       emf = Persistence.createEntityManagerFactory(persistenceUnitName, parameters); 
      } 
     } else { 
      emf.getCache().evictAll(); 
     } 

     EntityManager em = emf.createEntityManager(); 
     return em; 
    } 
+1

धन्यवाद, यह मेरे लिए काम किया। – CrushedPixel

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