2013-02-25 16 views
7

मैं निम्नलिखित कोड है:क्वैरी हाइबरनेट कैश

Person a = new Person(); 
a.setName("John"); 

Session session = openHibernateSession(); 

session.beginTransaction(); 

session.saveOrUpdate(a); 

Criteria critera = session.createCriteria(Person.class); 
critera.add(Restrictions.eq("name","John")); 
Person personFromCache = (Person) criteria.uniqueResult(); 

... 

session.commit(); 

क्या मैं चाहता हूँ दोनों डेटाबेस और हाइबरनेट के कैश से वस्तुओं को खोजने की क्षमता है। निम्नलिखित उदाहरण uniqueResult पर कॉल करने पर शून्य लौटाता है। क्या सहेजे गए ऑब्जेक्ट्स को पुनर्प्राप्त करने का कोई तरीका है जो अभी तक डेटाबेस के लिए प्रतिबद्ध नहीं हैं?

उत्तर

1

यदि आप आईडी के अलावा अन्य खोज रहे हैं तो हाइबरनेट पहले स्तर के कैश का उपयोग नहीं करेगा। हाइबरनेट प्राप्त करें और लोड डिफ़ॉल्ट रूप से पहले स्तर के कैश से संबंधित है लेकिन मानदंड क्वेरी नहीं है। आपके मामले में वहाँ निस्तब्धता सत्र = बस इस session.flush(); की तरह अपने सत्र फ्लश, जबकि ऐसा करने से सत्र से डेटा डेटाबेस इसलिए ईद जीई उत्पन्न होगा और परिणाम मानदंड क्वेरी के रूप में सिंक्रनाइज़ किया जाएगा करके मेरी तरफ

  1. से दो समाधान कर रहे हैं होगा परिणाम डेटाबेस में खोजें और परिणाम आपको सूची देगा।

  2. हाइबरनेट द्वितीय स्तर कैश सक्षम करें = आप हाइबरनेट कैश प्रदाताओं द्वारा ehCache जैसे दूसरे स्तर के कैश को सक्षम कर सकते हैं और चाल लागू कर सकते हैं।

0

आप StatelessSession उपयोग कर सकते हैं, लेकिन चेतावनी दी: उन entitys किसी भी सत्र के लिए बाध्य नहीं कर रहे हैं और अगर आप संबंधों या आलसी क्षेत्रों को हल करना चाहते आप अपवाद मिल जाएगा!

0
session.beginTransaction(); 

session.saveOrUpdate(a); 

session.flush(); 

Criteria critera = session.createCriteria(Person.class); 
critera.add(Restrictions.eq("name","John")); 
Person personFromCache = (Person) criteria.uniqueResult(); 
0

हम टेस्टएनजी परीक्षण ढांचे का उपयोग करने के अलावा कुछ समान चीजें करते हैं। कई उत्तरों सत्र.फ्लश() विधि कॉल पर चर्चा करते हैं। यह सही है। फ़्लश करने के लिए कॉल हाइबरनेट को कई चीजें करने के लिए कहता है, यह सुनिश्चित करने के साथ कि वर्तमान में कतार में प्रतीक्षा करने वाले सभी डेटाबेस कॉल निष्पादित किए गए हैं और कतार से साफ़ हो गए हैं।

0

यदि आप उपयोगकर्ता नाम के आधार पर चयन कर रहे हैं तो भी यह डेटा लौटाता है। यह शून्य वापस नहीं आ रहा है।

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