डिफ़ॉल्ट रूप से @OneToMany
केवल एक जॉइन टेबल तैयार करेगा यदि आप यूनिडायरेक्शनल रिलेशनशिप का उपयोग करेंगे।
दूसरे शब्दों में, यदि आप Employee
और Project
संस्थाओं है और Employee
इकाई परिभाषित किया गया है के रूप में इस प्रकार है (मान है इन संस्थाओं के लिए कोई orm.xml
प्रविष्टियों):
@Entity
public class Employee {
// ...
@OneToMany
Set<Project> projects;
}
@Entity
public class Project {
// ...
}
जेपीए प्रदाता पैदा करेगा में एक जॉइन टेबल (नोटिस mappedBy
एट्रिब्यूट @OneToMany
एनोटेशन में Employee
इकाई Project
से कोई संदर्भ नहीं है)।
दूसरी ओर, यदि आप द्विदिश रिश्ते का उपयोग करेंगे:
@Entity
public class Employee {
// ...
@OneToMany(mappedBy="employee")
Set<Project> projects;
}
@Entity
public class Project {
// ...
@ManyToOne
Employee employee;
}
में शामिल होने की मेज, इस्तेमाल किया जा नहीं होगा के रूप में वहाँ "कई" पक्ष इस रिश्ते के लिए विदेशी कुंजी संग्रहीत करने में इस्तेमाल किया जाएगा।
हालांकि, जब आप बिडरेक्शनल @OneToMany
परिभाषित mappedBy
विशेषता के साथ संबंध रखते हैं तो आप उन मामलों में भी शामिल होने के लिए मजबूर कर सकते हैं। आप रिश्ते के स्वामित्व वाले पक्ष पर @JoinTable
एनोटेशन का उपयोग कर इसे प्राप्त कर सकते हैं।
जैसा कि आपने उल्लेख किया है, @JoinColumn
का उपयोग करने के लिए, जहां तालिका में डिफ़ॉल्ट रूप से उपयोग किया जाएगा (यूनिडायरेक्शनल @OneToMany
संबंध) का उपयोग करने की संभावना भी है।
एफके का परीक्षण करना और अपने लिए टेबल प्रदर्शन अंतर में शामिल होना सबसे अच्छा है। मैं बस अनुमान लगा सकता हूं कि कम जुड़ाव (इस मामले में: एफके) में बेहतर प्रदर्शन होता है।
इसके अलावा, कभी-कभी डीबीए डेटाबेस स्कीमा को परिभाषित करता है और आपको केवल मौजूदा स्कीमा में अपने मैपिंग को फिट करने की आवश्यकता होती है। फिर आपके पास एफके पर कोई विकल्प नहीं है या टेबल में शामिल नहीं है - यही कारण है कि आपके पास कोई विकल्प है।
स्रोत
2011-12-20 16:05:34
1: एन संबंध में संबंध तालिका का उपयोग करने की कोई आवश्यकता नहीं है। अधिक सटीक पूछो। –
डिफ़ॉल्ट रूप से @OneToMany मैपिंग एक जॉइन टेबल बनाता है। मुझे नहीं पता कि डिफ़ॉल्ट विदेशी कुंजी के साथ मैपिंग क्यों नहीं कर रहा है ... –
मेरा अनुमान है कि यह प्रदर्शन या ड्रॉ बैक के लिए नहीं है, लेकिन क्योंकि जेपीए आम तौर पर मानता है कि तालिका के भीतर सभी फ़ील्ड इसी इकाई के भीतर मैप किए जाते हैं। यह एक बढ़त मामला है क्योंकि OneToMany के साथ OneToMany के साथ यह अधिक आम है। Unidirectional OneToMany के साथ joincolumn का उपयोग करके, यह आवश्यक है कि बच्चे की तालिका में एक विदेशी कुंजी हो, लेकिन बच्चे की इकाई के माता-पिता का संदर्भ नहीं है। – Chris