दिलचस्प पोस्ट
प्रदर्शन के बीच अंतर क्या है: इनलाइन और प्रदर्शन: इनलाइन-ब्लॉक? XSLT में मैं एक अलग चर से वैश्विक चर कैसे बढ़ाता हूं? अपने स्टैकट्र्रेस को प्रिंट करने के लिए प्रोग्राम से जीडीबी को लागू करना बेहतर है? MySQL त्रुटि 1436: सरल क्वेरी के साथ थ्रेड स्टैक ओवररुन तारीखों पर पांडा डेटाफ़्रेम फ़िल्टरिंग पॉइंटर + आकार या रेंज के रूप में लिपटे फ़ंक्शन के लिए एक सरणी को पास करें पायथन में कार्यात्मक रूप से प्रोग्राम क्यों? एक बाइट सरणी के लिए एक बाइनरी स्ट्रिंग प्रतिनिधित्व परिवर्तित करें जावास्क्रिप्ट का उपयोग करके वेबव्यू की सामग्री की कुल ऊंचाई प्राप्त करें एनएसएआरआरई और एनएसएमयूटीएबलएआरआरई पर प्रतिलिपि और अयोग्य परिवर्तन कैसे लागू होते हैं? मैमैड ड्राइव का वास्तविक पथ कैसे निर्धारित करूं? सिर्फ यूआरएल का इस्तेमाल करते हुए और नई विंडो खोलने के बिना एक वेब पेज छपाई? ब्राउज़र में एक AJAX (XmlHttpRequest) कॉल पर टाइमआउट का पता कैसे लगा सकता है? कैसे एक "स्थिति: निरपेक्ष" तत्व केंद्र के लिए कैसे एक नई विंडो खोलने और jQuery में jQuery का उपयोग कर इसे सम्मिलित करें?

हाइबर्नेनेट के साथ आलसी-इनीट समस्या को हाइबरनेट करना सुनिश्चित करें। Enable_lazy_load_no_trans

मैं कुख्यात हाइबरनेट अपवाद से ग्रस्त हूं

org.hibernate.LazyInitializationException: could not initialize proxy - no Session 

अब समुदाय अधिक उत्साहित है

<property name="hibernate.enable_lazy_load_no_trans" value="true"/>

कह रही है कि यह समस्या को हल करता है लेकिन सावधानी के साथ आईटी का उपयोग करें

सावधानी के साथ इसका क्या मतलब है? यह संपत्ति वास्तव में क्या करती है?

कृपया मुझे कोई अंतर्दृष्टि दें अग्रिम में धन्यवाद।

Solutions Collecting From Web of "हाइबर्नेनेट के साथ आलसी-इनीट समस्या को हाइबरनेट करना सुनिश्चित करें। Enable_lazy_load_no_trans"

इस दृष्टिकोण के साथ समस्या यह है कि आपके पास N + 1 प्रभाव हो सकता है

कल्पना कीजिए कि आपके पास निम्न इकाई है:

 public class Person{ @OneToMany // default to lazy private List<Order> orderList; } 

यदि आपके पास एक रिपोर्ट है जो 10K व्यक्तियों को देता है, और यदि इस रिपोर्ट में आप कोड person.getOrderList() निष्पादित करते हैं। person.getOrderList() JPA / Hibernate 10K क्वेरी निष्पादित करेगा। यह N + 1 प्रभाव है, आपके पास उन सभी प्रश्नों के बारे में कोई नियंत्रण नहीं होगा जो निष्पादित होंगे।

अब कल्पना कीजिए कि ऑर्डर नीचे की तरह है:

 public class Order{ @OneToMany // default to lazy private List<EmailSent> emailSentList; } 

अब कल्पना कीजिए कि आप व्यक्ति के साथ पुनरावृत्ति है। person.getOrderList() और हर Order order आप एक Order order करेंगे। order.getEmailSentList() । क्या आप अब समस्या देखते हैं?

LazyInitializationException के लिए आप कुछ समाधान हो सकते हैं:

  • OpenInSessionInView दृष्टिकोण का उपयोग करें आपको एक वेबफिल्टर बनाने की आवश्यकता होगी जो लेनदेन को खोलकर बंद कर देगी। साथ समस्या N + 1 प्रभाव है
  • हाइबरनेट.एन्बल_लाज़ी_लोड_नो_ट्रांस कॉन्फ़िगरेशन का प्रयोग करें, जो हाइबरनेट है और यदि आप की आवश्यकता हो तो आप अपने प्रोजेक्ट को अन्य जेपीए प्रदाता के पास नहीं कर पाएंगे। आपके पास N + 1 प्रभाव भी हो सकता है।
  • PersistenceContext विस्तारित नामित ईजेबी सुविधा का उपयोग करें। इसके साथ आप संदर्भ को कई लेन-देन के खोलेगा। समस्याएं हैं: एन + 1 प्रभाव हो सकता है, बहुत सारे सर्वर मेमोरी का उपयोग करें (संस्थाएं प्रबंधित रहेंगी)
  • क्वेरी में FETCH का उपयोग करें इस दृष्टिकोण से आप एक JPQL / HQL की तरह कर सकते हैं: select p from Person p join fetch p.orderList । इस क्वेरी के साथ आपको अपनी सूची को डेटाबेस से लोड किया जाएगा और N + 1 प्रभाव नहीं होगा। समस्या ये है कि प्रत्येक मामले के लिए आपको एक JPQL लिखना होगा।

यदि आपको अभी भी कोई समस्या है, तो इस लिंक की जांच करें: http://uaihebert.com/four-solutions-to-the-lazyinitializationexception

यह सत्र की अवधारणा के साथ हम हाइबरनेट के पुनरावर्तनीय पढ़ा जाने वाले शब्दों की प्रवर्तन का लाभ कैसे उठा सकते हैं, इसके साथ यह आगे बढ़ता है। जब कोई ऑब्जेक्ट पहले लोड हो जाता है और यदि ऑब्जेक्ट को सत्र के जीवन में फिर से संदर्भित किया जाता है, तो उसी ऑब्जेक्ट को वापस लौटा दिया गया है या नहीं यह ऑब्जेक्ट डीबी में बदल गया है या नहीं। यह हाइबर्नेट द्वारा स्वचालित रूप से प्रदान किए जाने वाले दोहराए जाने योग्य पढ़ाई है।

इस सेटिंग के साथ, आपके पास यह गारंटी प्रदान करने वाला कोई सत्र नहीं है, इसलिए यदि अब आप इस डेटा का उपयोग कर रहे हैं तो आपको डेटा का नवीनतम संस्करण प्राप्त होगा।

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

इसे सरल रखने के लिए आप इस सेटिंग का सुरक्षित रूप से उपयोग कर सकते हैं यदि आपका प्रोग्राम इससे प्रभावित नहीं होता है: सत्र से पहले डेटा प्राप्त करने वाले डेटा को कैसे बाक़ी मिलेगा, जो उस सत्र के दौरान सत्र से बाहर आती रहेगा

लेकिन यदि यह ( आपका प्रोग्राम समय के मुद्दों, जब यह ठीक एक समय काम करता है और किसी अन्य समय को विफल हो सकता है ) एक चिंता का विषय है, तब सत्र में सभी आवश्यक डेटा प्राप्त करें।

LazyInitializationException को हल करने का सबसे अच्छा तरीका आपकी इकाई प्रश्नों में JOIN FETCH निर्देश का उपयोग करना है।

प्रदर्शन के लिए ईएजीआर लोडिंग खराब है इसके अलावा, वहाँ विरोधी पैटर्न जैसे हैं:

  • दृश्य में ओपन सत्र
  • hibernate.enable_lazy_load_no_trans

जिनसे आपको कभी भी उपयोग नहीं करना चाहिए क्योंकि वे या तो यूआई रेंडरिंग (ओपन सत्र इन व्यू में) के लिए खोलने के लिए डेटाबेस कनेक्शन की आवश्यकता होती है, या प्रारंभिक दृढ़ता संदर्भ ( hibernate.enable_lazy_load_no_trans ) के बाहर लाए गए हर आलसी एसोसिएशन के लिए एक डेटाबेस कनेक्शन की आवश्यकता होती है ।

कभी-कभी, आपको संस्थाओं की ज़रूरत नहीं होती है, और डीटीओ प्रक्षेपण भी बेहतर है ।

संभवतः क्योंकि बेहतर समाधान हैं, जैसे कि @ ट्रान्सैक्शनल , जहां उद्घाटन और समापन सत्र बहुत ही सामान्य पैटर्न का अनुसरण करते हैं, "एक सत्र खोलें, फिर कोशिश करें-अंत में सब कुछ लपेटें, अंत में रोल रोल करें और आखिरकार सत्र बंद हो जाता है।" यह एनोटेशन आमतौर पर वेब एप्लिकेशन और सेवाओं के लिए अनुरोध-स्तर पर है

या यदि आपको अधिक दानेदार नियंत्रण की आवश्यकता है तो आप सत्र सत्र की मैन्युअल रूप से सत्र खोल सकते हैं।

और जैसा कि अन्य लोगों ने उल्लेख किया है, आलसी-लोडिंग कुछ ऐसी चीज है जिन्हें आप जानते हैं। यह एक चांदी की गोली नहीं है, लेकिन यह बहुत उपयोगी हो सकता है। आम तौर पर, यदि आपके ऐप को कई छोटे अनुरोधों के लिए डिजाइन किया गया है, तो ठीक है

उत्सुक लोडिंग भी बहुत खराब हो सकती है। उदाहरण के लिए, जब आपके ऑब्जेक्ट मॉडल में कई-से-कई रिश्तों होते हैं लेकिन आपके अनुरोध एक से अधिक स्तर की गहरी डेटा का उपयोग नहीं करते हैं।

या आप अभी पूरी बात को अभी भूल सकते हैं। आलसी लोडिंग का उपयोग करें जब तक कि यह एक समस्या बन जाए। और अगर ऐसा होता है, तो आप मायबेटिस के साथ भी बेहतर होता।