2010-10-05 15 views
14

मैंने एक कक्षा बनाई है जिसमें मैंने अपने कुछ फ़ील्ड (अन्य इकाइयां) को लॉज़ी लोड करने के लिए सेट किया है। अब मुझे सत्र से अलग होने के बाद इस ऑब्जेक्ट का उपयोग करने की आवश्यकता है, इसलिए मुझे यह सुनिश्चित करने की ज़रूरत है कि मुझे आवश्यक सभी फ़ील्ड इसे अलग करने से पहले पॉप्युलेट हो जाएं। मैंने गेटर्स को इन आलसी खेतों में बुलाए जाने की कोशिश की लेकिन ऐसा लगता है कि यह काम नहीं कर रहा था। किसी को भी पता है कि इन क्षेत्रों को लोड करने के लिए कैसे मजबूर किया जाए?पृथक वस्तुओं में आलसी लोडिंग हाइबरनेट

+0

क्या आप सुनिश्चित हैं कि गेटर्स को कॉल करते समय आपका सत्र खुला है? –

+0

सत्र जब मैं गेटर्स –

उत्तर

11
Hibernate.initialize(yourObject) 

उस वस्तु/संग्रह को बलपूर्वक प्रारंभ करेगा जो इसे पारित किया गया है। इसके लिए आपको एक सक्रिय सत्र की आवश्यकता है।

यदि इकाई को अलग किया गया है, तो आपको सक्रिय सत्र में ऑब्जेक्ट (merge(..) का उपयोग करके) को फिर से संलग्न करना होगा और फिर इसे प्रारंभ करना होगा।

+0

+1 बोझो को कॉल करता हूं तो निश्चित रूप से खुलता है ......... –

+1

'विलय' कुछ विशेष मामलों के लिए है। अंगूठे के नियम के रूप में मैं 'अपडेट' – pakore

+0

@ पकोरे को पुनः प्रतिक्रिया दूंगा - ठीक है, मुझे लगता है कि अंतर यह है कि 'विलय (..)' एक नया रिकॉर्ड भी डाल सकता है। लेकिन मैं जेपीए अर्थशास्त्र के लिए अधिक उपयोग किया जाता है, इसलिए यह यहां थोड़ा अलग हो सकता है। – Bozho

3

आप इसे सत्र में दोबारा जोड़ सकते हैं। यह सामान्य तरीका है।

session.update(yourObject); //This reattachs the object to the current session. 
yourObject.someGetter(); //This will work now. 
1

मुझे पता है कि आप हाइबरनेट के लिए कहा लेकिन EclipseLink इस सुविधा है तो यह अगर तुम जेपीए उपयोग कर रहे हैं और किसी दिए गए कार्यान्वयन से बंधा नहीं बाहर की जाँच के लायक हो सकता है। आप अन्य समस्याओं EclipseLink हालांकि की ओर पलायन हो सकती हैं ..

2
<prop key="hibernate.enable_lazy_load_no_trans">true</prop> 

आप अपने विन्यास फाइल में इस लाइन को जोड़ सकते हैं, यह आपके आलसी वस्तुओं भी प्राप्त कर सके यह अलग है, लेकिन यह उपयोग के बाद 4.1.7 संस्करण होना चाहिए चूंकि पिछले संस्करण के साथ कुछ कनेक्शन रिसाव समस्याएं हैं .see here

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