सबसे पहले, KLE के उत्तर के लिए कुछ स्पष्टीकरण :
असंबंधित (अशक्त) वन-टू-वन एसोसिएशन एकमात्र ऐसा है जिसे बायटेक इंस्ट्रूमेंटेशन के बिना अनुमानित नहीं किया जा सकता है। इसका कारण यह है कि मालिक इकाई को यह पता होना चाहिए कि क्या एसोसिएशन की संपत्ति में एक प्रॉक्सी ऑब्जेक्ट या NULL होना चाहिए और यह निर्धारित नहीं कर सकता है कि आम तौर पर साझा किए गए PK के माध्यम से एक-से-एक मैप किए जाने के कारण इसकी बेस टेबल के कॉलम को देखकर, इसलिए यह वैसे भी बहुत उत्सुकता से छद्म व्यर्थ बना दिया है। यहाँ एक अधिक विस्तृत विवरण दिया गया है।
कई-से-एक एसोसिएशन (और एक-से-कई, जाहिर है) इस मुद्दे से ग्रस्त नहीं हैं। मालिक इकाई आसानी से अपने स्वयं के एफके (और एक से कई के मामले में, खाली संग्रह प्रॉक्सी शुरू में बनाई गई है और मांग पर पॉपुलेटेड है) की जांच कर सकती है, इसलिए एसोसिएशन आलसी हो सकती है।
एक-से-एक के साथ एक-से-कई को बदलना बहुत अच्छा विचार है। आप इसे अनूठे कई-से-एक के साथ बदल सकते हैं लेकिन अन्य (संभवतः बेहतर) विकल्प हैं।
रोब एच , एक वैध बिंदु है लेकिन आप अपने मॉडल के आधार पर यह लागू करने में सक्षम नहीं हो सकता है (उदाहरण के लिए अपने एक-से-एक संघ है, तो है नल)।
अब, जहां तक मूल प्रश्न है:
A) @ManyToOne(fetch=FetchType.LAZY)
ठीक काम करना चाहिए। क्या आप सुनिश्चित हैं कि यह क्वेरी में ही नहीं लिखा जा रहा है? join fetch
एचक्यूएल और / या स्पष्ट रूप से निर्दिष्ट करना संभव है मानदंड मानदंड के माध्यम से लाने के लिए जो वर्ग एनोटेशन पर पूर्वता ले जाएगा। अगर ऐसा नहीं है और आपको अभी भी समस्या हो रही है, तो कृपया अपनी कक्षाओं, क्वेरी और परिणामस्वरूप SQL को अधिक-से-अधिक वार्तालाप के लिए पोस्ट करें।
बी) @OneToOne
पेचीदा मामला है। यदि यह निश्चित रूप से अशक्त नहीं है, तो रोब एच। के सुझाव पर जाएं और इसे इस प्रकार निर्दिष्ट करें:
@OneToOne(optional = false, fetch = FetchType.LAZY)
अन्यथा, यदि आप अपना डेटाबेस बदल सकते हैं (स्वामी तालिका में एक विदेशी कुंजी कॉलम जोड़ें), ऐसा करें और इसे "शामिल" के रूप में मैप करें:
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="other_entity_fk")
public OtherEntity getOther()
और अन्य में:
@OneToOne(mappedBy = "other")
public OwnerEntity getOwner()
यदि आप ऐसा नहीं कर सकते (और उत्सुकता के साथ नहीं रह सकते हैं) तो बायटेकोड इंस्ट्रूमेंटेशन आपका एकमात्र विकल्प है। मुझे CPerkins से सहमत होना होगा , हालाँकि - अगर आपके पास 80 हैं !!! उत्सुक OneToOne संघों के कारण, आप बड़ी समस्याओं तो यह :-) है
one-to-one
जैसे सूत्र के साथ उपयोग करेंselect other_entity.id from other_entity where id = other_entity.id
। बेशक, यह क्वेरी प्रदर्शन के लिए आदर्श नहीं है।