2012-02-08 20 views
7

स्प्रिंग 3.1.0 में हाइबरनेट 4 से सत्र फ़ैक्टरीउटिल .getSession विधि का क्या हुआ? इसके बजाय क्या उपयोग किया जाना चाहिए? sessionFactory.getCurrentSession() मुझे यह अपवाद दे रहा है:वसंत: क्यों Hionernate 4 में सत्र फैक्ट्री का उपयोग कक्षा सत्र विधि प्रदान नहीं करता है?

org.hibernate.HibernateException: No Session found for current thread 
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97) 
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:883) 

कोई संकेत?

+1

मुझे एक ही समस्या का सामना करना पड़ रहा है, मैं इसके बजाय sessionFactory.getCurrentSession() का उपयोग कर रहा हूं, लेकिन मुझे यकीन नहीं है कि यह जाने का सही तरीका है या नहीं। मार्टन के पोस्ट में – craftsman

उत्तर

0

सुनिश्चित नहीं है कि उन्होंने इसे क्यों हटा दिया, शायद उन्होंने org.hibernate.context.CurrentSessionContext का उपयोग करके एक बेहतर डिज़ाइन लागू किया। this post से के रूप में:

... बस सादे SessionFactory का उपयोग करें और मौजूदा व्यवहार सत्र ( openSession का उपयोग नहीं करते !!!!) प्राप्त करने के लिए getCurrentSession विधि का उपयोग करें और आप जाने के लिए अच्छे हैं .. ।

documentation of SessionFactory.getCurrentSession() से के रूप में: अपने लेनदेन demarcat

The definition of what exactly "current" means controlled by the CurrentSessionContext impl configured for use. 
+0

, मुख्य शब्द "वर्तमान * लेनदेन * सत्र" है। इसलिए, गैस्टल्डी को लेनदेन संबंधी सीमा निर्धारित करना होगा जैसा कि मैंने अपने उत्तर में वर्णित किया है –

0

'org.hibernate.HibernateException: No Session found for current thread' अपवाद होता है जब आप कॉन्फ़िगर नहीं किया है वसंत के साथ आयन ठीक से।

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

आमतौर पर, लोग उस वर्ग पर @Transactional कक्षा (आमतौर पर एक सेवा) और configure Spring to start and end transactions on method invocations डालते हैं।

0

तो आप प्रॉपर्टी उदाहरण जोड़ने के लिए:

<prop key="hibernate.current_session_context_class">thread</prop>

अपने सत्र कारखाने सेम मानचित्रण करने के लिए। (अधिक जानकारी के लिए हाइबरनेट प्रलेखन जाँच)

3

उपयोग sessionFactory.getCurrentSession()

मेरा मानना ​​है कि एक "वर्तमान सत्र" की अवधारणा हाइबरनेट 3 में आया, SessionFactoryUtil से पहले इस अस्तित्व में लिखा गया था।

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