2011-10-04 22 views
10

मेरे पास 2 भौतिक सर्वर हैं जो मेरे वेब एप्लिकेशन को लोड बैलेंसर्स द्वारा प्रबंधित किया जाता है। मैं हमेशा मिलता है -org.hibernate.LazyInitializationException: प्रॉक्सी प्रारंभ नहीं कर सका - कोई सत्र

org.hibernate.LazyInitializationException: प्रॉक्सी सक्रिय नहीं कर सका - कोई सत्र

जब सर्वरों में से एक मारा जाता है, जबकि अन्य एक बिना किसी समस्या के आसानी से चलाता है। मेरे पास स्थानीय प्रबंधित कैश स्टोर सक्षम है और एप्लिकेशन द्वारा प्रबंधित किया गया है। यह अपवाद केवल एक तालिका से एक विशेष कॉलम तक पहुंचने का प्रयास करते समय होता है। बाकी ऑपरेशन बिल्कुल ठीक काम करते हैं चाहे इस सर्वर पर हिट हो।

आलसी बनाना = झूठी प्रदर्शन समस्या बन जाएगी क्योंकि उस तालिका में पंक्तियों की संख्या काफी बड़ी है। और वैसे, हम लोड (ऑब्जेक्ट) के बजाय सत्र पर प्राप्त (ऑब्जेक्ट) का उपयोग कर रहे हैं।

उत्तर

5

आपकी ऑब्जेक्ट अलग है। आप इसे एक्सेस करने से पहले वर्तमान सत्र के लिए इसे फिर से जोड़ने की आवश्यकता:

session.update(object); 

इसके अलावा, आप किसी लेन-देन के भीतर इसे उपयोग

समस्या/समाधान here

10

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

चूंकि आप वास्तव में उस संगठन में डेटा का उपयोग कर रहे हैं, इसे EAGER ऐसा कुछ लगता है जो आप वास्तव में करना चाहते हैं। और यदि वह तालिका इतनी बड़ी है, तो आपको इसे अनुक्रमणित करना चाहिए ताकि इसके खिलाफ पूछे जाने वाले प्रश्न कुशल हों।

+0

मैं एक ऐसी ही समस्या है लेकिन जब मैं उत्सुक प्राप्त कर रहा है प्रकार मैं एक अलग समस्या में पड़ उपयोग करें: hashCode लागू करने के लिए इस्तेमाल किया क्षेत्र से पहले एक PersistentSet करने के लिए मेरे वस्तु को जोड़ने के लिए कोशिश करता हाइबरनेट/बराबरी प्रारंभ कर रहे हैं। मेरे कोड में यदि ऐसा होता है तो मुझे एक अपवाद फेंक दिया जाता है, इसलिए यह बुरी तरह विफल रहता है (हैशकोड विधि का उल्लंघन अन्यथा किया जाएगा)। इसे कैसे ठीक किया जाये, कोई विचार? –

+0

कुछ समस्या होने के बाद। आप कहते हैं 'और आप अपने डीएओ में उस संगठन को पॉप्युलेट नहीं कर रहे हैं।' यह वास्तव में कैसे प्राप्त किया जाता है? –

0

क्या यह एक संगठन या संपत्ति है - यदि यह एक संपत्ति है तो समस्या यह हो सकती है कि सर्वर का एक गैर-वाद्य संस्करण चला रहा है।

Lazy attribute fetching: an attribute or single valued association is fetched when the instance variable is accessed. This approach requires buildtime bytecode instrumentation and is rarely necessary. 
12

आपके द्वारा प्रदान किए गए टैग से, मैं आपको वसंत फ्रेमवर्क का उपयोग करके इस समस्या में भाग गया। स्प्रिंग डेटा org.springframework.data.jpa.repository.JpaRepository का उपयोग करते समय मैं उसी LazyInitializationException में भाग गया।

मैंने @Transactional के साथ डेटाबेस से डेटा पुनर्प्राप्त करने के लिए अप्रत्यक्ष रूप से हाइबरनेट का उपयोग करके समस्या को हल किया।

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