दिलचस्प पोस्ट
आर: कस्टम लेजेंड फॉर मल्टीपल लेयर जीगप्लोट सूची में चयनित आइटम से टेक्स्ट को निकालने के लिए कैसे करें एंड्रॉइड पर एक इरादे के माध्यम से Google मानचित्र दिशाएं लॉन्च करना कच्चे फ़ोल्डर url पथ? उद्देश्य-सी में एक सदस्य चर के नाम पर एक अंडरस्कोर क्या दर्शाता है? MVC 3 रैज़र व्यू में कैस्केडिंग ड्रॉप-डाउन गैर लालची regex मिलान में sed? किसी SQL क्वेरी में regex (प्रतिस्थापित) करें JAXB संदर्भ और मार्शलर लागत बनाने मैं "खोज" से सभी "अनुमति अस्वीकृत" संदेशों को कैसे बाहर निकाल सकता हूं? GitHub से अजगर पैकेज कैसे स्थापित करें? पृष्ठ पुनः लोड होने के बाद मैं वर्तमान टैब को ट्वीटर बूटस्ट्रैप के साथ कैसे सक्रिय कर सकता हूं? तार के लिए अच्छा हैश फ़ंक्शन मैं जावा में एक स्थिर स्थानीय चर कैसे बनाऊं? कैसे saveAsTextFile बनाने के लिए एकाधिक फ़ाइल में आउटपुट नहीं विभाजित?

सीतनिद्रा में होना: एक से एक आलसी लोडिंग, वैकल्पिक = गलत

मुझे इस समस्या का सामना करना पड़ा था कि एक-एक-एक आलसी लोडिंग हाइबरनेट में काम नहीं करती। मैंने इसे पहले ही हल कर लिया है , लेकिन अभी भी ठीक से समझ नहीं आता कि क्या होता है।

मेरा कोड ( आलसी लोडिंग यहाँ काम नहीं करता है , जब मैं व्यक्ति को खींचता हूं – पता भी प्राप्त होता है):

@Entity public class Person{ @Id @SequenceGenerator(name = "person_sequence", sequenceName = "sq_person") @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "person_sequence") @Column(name = "id") private long personID; @OneToOne(mappedBy="person", cascade=CascadeType.ALL, fetch = FetchType.LAZY) private Adress address; //.. getters, setters } @Entity public class Address { @Id @Column(name="id", unique=true, nullable=false) @GeneratedValue(generator="gen") @GenericGenerator(name="gen", strategy="foreign", parameters=@Parameter(name="property", value="person")) private long personID; @PrimaryKeyJoinColumn @OneToOne private FileInfo person; } 

लेकिन : अगर मैं वनटऑन संबंध में optional=false जोड़ता हूं, तो आलसी लोडिंग ठीक काम करती है !

 @OneToOne(mappedBy="person", cascade=CascadeType.ALL, optional = false, fetch = FetchType.LAZY) private Adress address; 

प्रश्न / सुरक्षा: कृपया, मुझे बताएं कि कैसे optional=false एनोटेशन आलसी लोड हो रहा है।

पी एस मैंने पोस्ट 1 और पोस्ट 2 पोस्ट पढ़ा है, और समझते हैं कि सरल OneToOne आलसी क्यों नहीं हो सकता, लेकिन मैं अभी भी optional=false जादू नहीं समझ सकता।

Solutions Collecting From Web of "सीतनिद्रा में होना: एक से एक आलसी लोडिंग, वैकल्पिक = गलत"

यदि संघ वैकल्पिक है, तो सीतनिद्रा में होना किसी भी पता नहीं है कि किसी दिए गए व्यक्ति के लिए किसी क्वेरी को बिना किसी पते के मौजूद है। इसलिए यह एक प्रॉक्सी के साथ पता फ़ील्ड को पॉप्युलेट नहीं कर सकता, क्योंकि उस व्यक्ति को संदर्भित करने वाला कोई प्रेषक नहीं हो सकता, और वह इसे रिक्त नहीं बना सकता, क्योंकि उस व्यक्ति को संदर्भित करने वाला कोई पता हो सकता है

जब आप संघात्मक अनिवार्य (यानी optional=false ) बनाते हैं, तो यह आपको भरोसा दिलाता है और मानता है कि एक पता मौजूद है, क्योंकि संघ अनिवार्य है। इसलिए यह सीधे प्रॉक्सी के साथ पता फ़ील्ड को पॉप्युलेट करता है, यह जानकर कि व्यक्ति को संदर्भित करने वाला कोई पता है।

सबसे सरल एक नकली एक-से-कई संबंधों के लिए है यह काम करेगा क्योंकि संग्रह की आलसी लोडिंग बहुत आसान है, एकल नल योग्य संपत्ति के आलसी लोडिंग, लेकिन आम तौर पर यह समाधान बहुत ही असुविधाजनक है यदि आप जटिल JPQL / HQL क्वेरीज़ का उपयोग करते हैं

दूसरा एक का उपयोग समय बीटेकोड इंस्ट्रूमेंटेशन का उपयोग करना है। अधिक जानकारी के लिए कृपया हाइबरनेट दस्तावेज पढ़ें: 19.1.7। आलसी संपत्ति लाने का उपयोग करना। याद रखें कि इस मामले में आपको आलसी बनाने के लिए एक-से-एक रिश्ते के लिए @LazyToOne(LazyToOneOption.NO_PROXY) एनोटेशन जोड़ना @LazyToOne(LazyToOneOption.NO_PROXY) । LAZY को लाने की सेटिंग पर्याप्त नहीं है

आखिरी समाधान को रनटाइम बाइटकोक इंस्ट्रूमेंटेशन का उपयोग करना है, लेकिन यह केवल उन लोगों के लिए काम करेगा जो हाइबरनेट को जेपीए प्रदाता के रूप में पूर्ण विकसित जेईई पर्यावरण (ऐसी स्थिति में " hibernate.ejb.use_class_enhancer " की सेटिंग में सही करने के लिए ट्रिक चाहिए: इकाई प्रबंधक कॉन्फ़िगरेशन ) या रनटाइम बुनाई करने के लिए कॉन्फ़िगर वसंत के साथ हाइबरनेट का उपयोग करें (यह कुछ पुराने एप्लिकेशन सर्वर पर प्राप्त करना कठिन हो सकता है) इस मामले में @LazyToOne(LazyToOneOption.NO_PROXY) एनोटेशन भी आवश्यक है।