- बिडरेक्शनल कई से अधिक रिश्तों में मैप्डबी को सेट करने का क्या कारण है?
- जब एक टेबल में पर्याप्त मात्रा में रिकॉर्ड होते हैं, जबकि अन्य में कुछ होता है, तो मैप किए जाने के लिए कौन सा पक्ष बेहतर होता है?
उत्तर
mappedBy
एक बिडरेक्शनल संबंध के दोनों तरफ लिंक करता है। आप संबंध के स्वामी पर mappedBy
डालते हैं, इस पर आधारित नहीं है कि कितने रिकॉर्ड हैं (उर्फ ऑब्जेक्ट उन्मुख डिज़ाइन)। आपको यह जानकारी किसी भी जेपीए ट्यूटोरियल और दस्तावेज़ीकरण में मिल जाएगी।
यह वास्तव में एक अच्छा सवाल है, और यह "स्वामित्व" इकाई की अवधारणा को समझने में मदद करता है। यदि आप join tables
रखने से दोनों पक्षों (एक द्विपक्षीय संबंध में) को रोकना चाहते हैं, तो एक अच्छा विचार है, तो आपको एक तरफ mappedBy=
तत्व होना चाहिए।
join table
@ManyToMany
एनोटेशन के mappedBy="name"
तत्व द्वारा नियंत्रित किया गया है या नहीं। Javadoc for mappedBy for the ManyToMany
annotation says:
वह क्षेत्र जो रिश्ते का मालिक है। जब तक रिश्ते unidirectional नहीं है तब तक आवश्यक है।
अपने (द्विदिश) उदाहरण के लिए, अगर वहाँ केवल दो @ManyToMany
एनोटेशन और कोई mappedBy=
तत्व थे, डिफ़ॉल्ट दो Entity
टेबल और दो Join Tables
होगा:
Hibernate: create table SideA (id bigint not null, primary key (id))
Hibernate: create table SideA_SideB (sidea_id bigint not null, sidebs_id bigint not null, primary key (sidea_id, sidebs_id))
Hibernate: create table SideB (id bigint not null, primary key (id))
Hibernate: create table SideB_SideA (sideb_id bigint not null, sideas_id bigint not null, primary key (sideb_id, sideas_id))
यह है कि कह रहा है जबकि प्रत्येक इकाई अपने ManyToMany
संबंधों का "मालिक" है, अतिरिक्त join table
सामान्य उपयोग मामले में अनावश्यक है, और जावाडोक का कहना है कि आपको mappedBy
एनोटेशन की आवश्यकता है।
@Entity
public class SideA {
@ManyToMany
Set<SideB> sidebs;
}
@Entity
public class SideB {
@ManyToMany(mappedBy="sidebs")
Set<SideA> sideas;
}
के बाद से SideB इकाई नहीं रह गया है इसकी ManyToMany
संबंध का मालिक है: यदि मैं SideA "स्वयं" रिश्ता है करने का फैसला, तो मैं mappedBy=
तत्व SideB संस्था के लिए है कि यह संबंध का स्वामी नहीं है निर्दिष्ट करने के लिए जोड़ने , अतिरिक्त JoinTable
नहीं बनाया जाएगा:
Hibernate: create table SideA (id bigint not null, primary key (id))
Hibernate: create table SideB (id bigint not null, primary key (id))
Hibernate: create table SideA_SideB (sideas_id bigint not null, sidebs_id bigint not null, primary key (sideas_id, sidebs_id))
इस डेवलपर के लिए महत्वपूर्ण है, क्योंकि वह या वह समझना चाहिए जब तक यह इस मामले SideA
इकाई में, स्वामित्व इकाई रख दिया जाता है कि कोई रिश्ता नहीं एक समान होती है। हालांकि, चूंकि यह एक द्विपक्षीय संबंध है, इसलिए डेवलपर दोनोंSideA
से SideB.sideas
और SideB
से SideA.sidebs
जोड़ना चाहिए।
इसलिए, यदि आप एक bidirectional
ManyToMany
संबंध है, जिसका अर्थ है आप ManyToMany
दोनों शामिल संस्थाओं पर, तो आप एक mappedBy="name"
उनमें से एक पर जावाडोक अनुसार जोड़ना चाहिए और एक निरर्थक join table
होने से बचाने के लिए है। चूंकि यह द्विपक्षीय है, मुझे नहीं लगता कि यह महत्वपूर्ण है कि आप किस पक्ष को owning
इकाई बनाते हैं - यह आपकी एप्लिकेशन प्राथमिकताओं पर निर्भर करता है।
संदर्भ::
What is the difference between Unidirectional and Bidirectional associations? हमेशा की तरह, यह हमेशा एसक्यूएल लॉग सक्षम और देखते हैं कि डेटाबेस में हो रहा है के लिए एक अच्छा विचार है।
What does relationship owner means in bidirectional relationship?।
What is the “owning side” in an ORM mapping?।
Most efficient way to prevent an infinite recursion in toString()?।
संबंध के रिवर्स पक्ष पर 'मैप किए गए' को डालकर दिलचस्प है, ईबीन 4.0.2 प्ले पर! 2.6 मैप किए बिना भी केवल एक टेबल बनाता है किसी भी तरफ से – Luke
- 1. ManyToMany
- 2. ManyToMany टेबल
- 3. पुनरावर्ती ManyToMany
- 4. मानचित्रण ManyToMany:
- 5. टेम्पलेट प्रारूप में Django Manytomany
- 6. हाइबरनेट @ManyToMany संबंध हटाएं
- 7. @OneToMany और @ManyToMany
- 8. @ManyToMany (mappedBy = "foo")
- 9. Doctrine2 ManyToMany स्व संदर्भित
- 10. सिद्धांत 2 ManyToMany कैस्केड
- 11. Django manytomany सत्यापन
- 12. Django ManyToMany मॉडल सत्यापन
- 13. Django ManyToMany फिल्टर()
- 14. Django सीमा ManytoMany चयनित FK
- 15. Symfony2-Doctrine: ManyToMany संबंध डेटाबेस
- 16. Django क्वेरीसमूह सटीक manytomany देखने
- 17. symfony2 querybuilder orderby गिनती manytomany
- 18. serializing ManyToMany (2.3.5) फेंकता ValueError
- 19. स्प्रिंग डाटा जेपीए: क्वेरी ManyToMany
- 20. सहेजा जा रहा है द्विदिश ManyToMany
- 21. एक बेहतर Django व्यवस्थापक ManyToMany फील्ड विजेट
- 22. सिद्धांत ManyToMany: किसी ऑब्जेक्ट को हटाने
- 23. Django - manytomany पर क्वेरी फिल्टर खाली
- 24. अद्वितीय फ़ील्ड मान और ManyToMany रिश्तों
- 25. सिद्धांत manyToMany वापसी PersistentCollection बजाय ArrayCollection
- 26. django ManyToMany मदद के माध्यम से
- 27. कैसे लायें को @OneToMany और @ManyToMany संस्थाओं
- 28. सिद्धांत में जॉइन-टेबल (ManyToMany) से पंक्तियां कैसे हटाएं?
- 29. Django व्यवस्थापक में ManyToMany MultipleSelect के लिए क्वेरीसमूह सीमित
- 30. @ManyToMany तालिका में शामिल किए बिना (विरासत डेटाबेस)
प्रलेखन का कहना है कि मैप किए जाने के लिए कोई अंतर नहीं है, यानी मैं मालिक के रूप में किसी भी पक्ष का चयन कर सकता हूं। मुझे समझ में नहीं आया है कि मैप किए जाने की ज़रूरत क्यों है कई लोगों में। यह कई से एक/एक से कई के लिए स्पष्ट है। मुझे संदेह है कि उत्पादकता पर असर पड़ता है, और यह मेरे प्रश्न के दूसरे भाग का कारण है। – Dmitry
जैसा कि मैंने कहा, एक बिडरेक्शनल संबंध में एक आवश्यकता है। 1-एन, 1-1, एम-एन उस प्रश्न के लिए अपरिवर्तनीय है। कौन सा पक्ष स्वामी को परिभाषित करता है। जेपीए स्पेक –
देखें वास्तव में आप – Jack