2008-10-18 17 views
7

क्या OpenSessionInView पैटर्न का उपयोग करने के अलावा एक हाइबरनेट वेब एप्लिकेशन में LazyInitializationExceptions से बचने के अन्य कोई तरीके हैं? OpenSessionInView का उपयोग करने के लिए कोई डाउनसाइड्स हैं?हाइबरनेट से बचने के लिए रणनीतियां LazyInitializationExceptions

+0

हाइबरनेट 4.1.6 इसे हल करता है: http://stackoverflow.com/questions/578433/how-to-solve-lazy-initialization-exception-using-jpa-and-hibernate-as-provider/11913404#11913404 – andreak

उत्तर

8

हमारे वेब अनुप्रयोगों पर काम करते समय, हम आम तौर पर पहले से तय करते हैं कि दृश्य पृष्ठों में कौन से ऑब्जेक्ट/फ़ील्ड की आवश्यकता होगी और सुनिश्चित करें कि दृश्य में प्रेषण से पहले सभी objecs मॉडल से ठीक से प्रारंभ किए गए हैं।

यह (कम से कम) तीन तरीकों से पूरा किया जा सकता:

  1. fetchingHibernate.initialize(property) साथ उत्सुक रणनीति का प्रयोग (यानी FetchMode.JOIN के साथ, आप Criteria API उपयोग कर रहे हैं)
  2. स्पष्ट रूप से प्रारंभ करने के गुण (यानी गुण)
  3. उपयुक्त गुण एक्सेसर फोन करके परोक्ष आरंभ गुण

OpenSessionInView के डाउनसाइड्स के बारे में, क्या आपने this पृष्ठ की जांच की है?

5

उत्सुकता लाने के लिए वैश्विक निर्णय किए बिना समस्या को संभालने का सबसे अच्छा तरीका; hql क्वेरी के साथ संयोजन में "fetch" कीवर्ड का उपयोग करना है।

से http://www.hibernate.org/hib_docs/reference/en/html/queryhql-joins.html

इसके अलावा, एक "को लाने" में शामिल होने की अनुमति देता है संगठनों या मूल्यों का संग्रह, अपने माता पिता वस्तुओं के साथ प्रारंभ करने के लिए एक चयन का उपयोग कर। यह संग्रह के मामले में विशेष रूप से उपयोगी है। यह संगठनों और संग्रहों के लिए मैपिंग फ़ाइल के बाहरी जुड़ने और आलसी घोषणाओं को प्रभावी ढंग से ओवरराइड करता है। अधिक जानकारी के लिए खंड 1 9 .1, "रणनीतियां लाने" देखें।

बिल्ली से

बिल्ली आंतरिक रूप लाने cat.mate cat.kittens

1

JBoss सीवन में स्विच करें लाने में शामिल होने के लिए छोड़ दिया में शामिल हो।

सीम फ्रेमवर्क उन लोगों द्वारा अच्छी तरह से आर्किटेक्टेड है जो हाइबरनेट विकसित करते हैं।

व्यू में ओपन सत्र के साथ भी, आपको अभी भी कुछ समस्याएं हो सकती हैं। इस पर निर्भर करता है कि आपका वेब एप्लिकेशन कितना जटिल है, दृश्य में ओपन सत्र सभी मामलों को संभाल नहीं करता है। मुझे एक ईमेल भेजने जैसे क्वार्ट्ज नौकरी के दौरान इकाइयों को लाने के रूप में डेटा (यूआई में) प्रदर्शित करने में समस्याएं थीं।

हाइबरनेट पहले ही समझदारी से डेटा प्राप्त करता है, fetch मोड को बदलने से प्रदर्शन में गिरावट आती है। इतना ही नहीं, लेकिन आप सम्मेलन से दूर हो रहे हैं और आपके प्रोजेक्ट को अपर्याप्त कॉन्फ़िगरेशन विवरण के साथ जोड़ देंगे।

वाल्टर

0

ओरेकल जावा ट्यूटोरियल का कहना है कि "एंटरप्राइज सेम समर्थन लेनदेन, तंत्र है कि साझा वस्तुओं की समवर्ती पहुँच लेते हैं।" इसलिए, आलसी Fetch मुद्दों को संभालने के लिए मैं एक स्टेटलेस जावा सत्र बीन बनाते हैं और फिर विधि से लौटने से पहले मुझे आवश्यक सभी उप वर्ग प्राप्त करते हैं। ओरेकल ने इसे "सत्र फैकेड" कोर जे 2 ईई पैटर्न के रूप में भी संदर्भित किया है। ये प्रथाओं में से कुछ के मुकाबले ज्यादा बेहतर आवेदन प्रथाओं की तरह प्रतीत होता है।

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