mysql - Hibernate, how to model this relationship -
मेरे पास निम्न टेबल हैं।
टेबल लॉजिकल_आईडी_सेक बनाएं (लॉजिकल_आईड इंट ऑटो_इन्रिमेंट, प्राथमिक कुंजी (तार्किक_आईडी)); तालिका mytable बनाएँ (physical_id int auto_increment, तार्किक_id int नल संदर्भ माता पिता (तार्किक_आईडी), डेटा varchar (20), प्राथमिक कुंजी (physical_id));
दूसरी तालिका स्वतः मूल्य के रूप में पहले तालिका स्वत: -निरित मान का उपयोग करती है। मुझे यकीन नहीं है कि यह कैसे सीतनिद्रा में होना चाहिए।
मैंने पढ़ा है, लेकिन मुझे समझ नहीं आता।
यह वास्तव में है कहना मुश्किल है, मुझे नहीं पता कि आप ऑब्जेक्ट स्तर पर क्या प्रतिनिधित्व करना चाहते हैं: क्या यह एक-से-एक विदेशी कुंजी संघ है? एक बहुत-से-एक संघ? क्या द्वि-दिशात्मक संघ है? ORM का उपयोग करने का अर्थ है टेबल से अधिक वस्तुओं का अर्थ और यह आम तौर पर ऑब्जेक्ट मॉडल प्रदान करने में मदद करता है।
मुझे लगता है यह एक से एक विदेशी कुंजी संघ है यह है कि सीतनिद्रा में होना जावा के साथ दृढ़ता की सिफारिश की गई है:
7.1.2 एक-से-एक-एक-एक-एक-विदेशी कुंजी संघों
एक प्राथमिक कुंजी साझा करने के बजाय , दो पंक्तियों में एक विदेशी कुंजी संबंध हो सकते हैं एक तालिका में एक विदेशी कुंजी स्तंभ होता है जो संबंधित तालिका की प्राथमिक कुंजी का संदर्भ देता है। (इस विदेशी कुंजी बाधा का स्रोत और लक्ष्य भी एक ही सारणी हो सकता है: इसे एक आत्म-संदर्भित रिश्ते कहा जाता है।)
चलिए एक उपयोगकर्ता से मानचित्रण को बदलते हैं पता। साझा प्राथमिक कुंजी के बजाय, अब आप USERS तालिका में एक SHIPPING_ADDRESS_ID कॉलम जोड़ें:
& lt; class name = "user" table = "USERS" & gt; & Lt; कई-से-एक नाम = "शिपिंगएड्डर" वर्ग = "पता" कॉलम = "SHIPPING_ADDRESS_ID" कैसकेड = "सेव-अपडेट" अनूठे = "सही" / & gt; & Lt; / वर्ग & gt;
इस संघ के लिए XML में मानचित्रण तत्व
& lt; कई-से-एक & gt;
- नहीं& lt; एक-से-एक & gt; , जैसा कि आप उम्मीद कर सकते हैं कारण सरल है: आप परवाह नहीं करते कि एसोसिएशन के लक्ष्य की तरफ क्या है, इसलिए आप इसे कई हिस्सों के बिना एक एक-एक संघ की तरह व्यवहार कर सकते हैं। आप चाहते हैं कि सभी को व्यक्त करना "इस इकाई की संपत्ति है जो कि किसी अन्य इकाई का एक उदाहरण है" और उस रिश्ते को दर्शाने के लिए एक विदेशी कुंजी फ़ील्ड का उपयोग करें। इस मानचित्रण के लिए डेटाबेस स्कीमा आंकड़ा 7.3 में दिखाया गया है।
औरUSERS
ADDRESS
बीच> के बीच एक-से-एक विदेशी कुंजी संबद्धता
P>
एक अतिरिक्त बाध्य इस रिश्ते को असली एक के रूप में लागू करता है
SHIPPING_ADDRESS_ID
कॉलम अद्वितीय बनाकर, आप घोषित करते हैं कि एक विशिष्ट पते को एक से अधिक उपयोगकर्ता द्वारा संदर्भित किया जा सकता है, जैसे कि शिपिंग पता। यह एक साझा प्राथमिक कुंजी संघ से गारंटी के रूप में मजबूत नहीं है, जो एक विशेष पते को एक से अधिक उपयोगकर्ता द्वारा संदर्भित करने की अनुमति देता है, अवधि कई विदेशी कुंजी कॉलमों के साथ (मान लें कि आपके पास अद्वितीयHOME_ADDRESS_ID
औरBILLING_ADDRESS_ID
है), आप एक ही पता लक्ष्य पंक्ति का संदर्भ कई बार कर सकते हैं। लेकिन किसी भी मामले में, दो प्रयोक्ता एक ही प्रयोजन के लिए समान पते को साझा नहीं कर सकते हैं।आइए हम उपयोगकर्ता से पता द्विदिश को संबोधित करते हैं।
उलटा संपत्ति संदर्भ
पिछले विदेशी कुंजी संघन को उपयोगकर्ता से
& lt; कई-से-एक & gt;
पते के साथ मैप किया गया था और वांछित बहुलता की गारंटी के लिए एक अद्वितीय बाधा इस एसोसिएशन द्विदिश बनाने के लिए मैपिंग एटैंट आप एड्रेस साइड पर जोड़ सकते हैं, ताकि जावा डोमेन मॉडल में पता से उपयोगकर्ता तक पहुंच संभव हो?XML में, आप एक
& lt; one बनाते हैं एक संपत्ति संदर्भ संदर्भ के साथ मानचित्रण:
& lt; एक-से-एक नाम = "उपयोगकर्ता" वर्ग = "उपयोगकर्ता" प्रॉपर्टी-रिफ = "शिपिंगएड्रेस" / & gt;
आप हाइबरनेट को बताते हैं कि पता वर्ग की उपयोगकर्ता संपत्ति एसोसिएशन के दूसरी तरफ एक संपत्ति के व्युत्क्रम है। अब आप उस पते पर पहुंचने वाले यूजर को एक्सेस करने के लिए
anAddress.getUser ()
कॉल कर सकते हैं जो आपके द्वारा दिया गया शिपिंग पता है। कोई अतिरिक्त स्तंभ या विदेशी कुंजी बाधा नहीं है; हाइबरनेट इस पॉइंटर को आपके लिए प्रबंधित करता है।
यदि आपके पास वास्तव में वास्तविक-से-एक संघ है, तो इसके बाद के समाधान को अनुकूलित करना बहुत आसान होना चाहिए।
Comments
Post a Comment