2013-01-01 30 views
26

फू है:@ManyToMany (mappedBy = "foo")

@ManyToMany(mappedBy = "foos") 
private Set<Bar> bars 

और बार है:

@ManyToMany 
private Set<Foo> foos 

क्या फर्क mappedBy के स्थान एक दो-तरफा रिश्ते को बनाने विशेषता है, अन्य तालिका को foo_bar, या bar_foo कहा जाता है; और बिना मैप किए गए विशेषता के रूप में मुझे दो जुड़ने वाली टेबल मिलती हैं, दोनों foo_bar और bar_foo।

+2

foo और bar वास्तव में इसके लिए शब्दों की एक खराब पसंद हैं। वास्तविक दुनिया में मौजूद रिश्तों के साथ कृपया अधिक ठोस उदाहरणों पर विचार करें। – haventchecked

उत्तर

36

The documentation का कहना है:

तो संघ द्विदिश है, एक तरफ मालिक हो गया है और एक तरफ उलटा अंत (जब संघ में संबंध के मान अपडेट यानी यह नजरअंदाज कर दिया जाएगा हो गया है। तालिका):

तो, जिस पक्ष में mappedBy विशेषता है, वह विपरीत पक्ष है। जिस पक्ष में mappedBy विशेषता नहीं है वह स्वामी है।

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

+0

क्या होगा यदि मैं उन्हें एक दूसरे को प्रतिबिंबित करना चाहता हूं, यदि कोई बार जोड़ा जाता है जो डीबी को भी संशोधित करना चाहिए? – NimChimpsky

+0

@NimChimpsky: एक बिडरेक्शनल रिलेशनशिप में, जब आप Foo.bars बदलते हैं, तो आपको Bar.foos को संगत रूप से बदलना चाहिए, इसलिए जब आप संशोधित करते हैं तो आपको डीबी में सहेजे जाने वाले चीज़ों की परवाह नहीं करनी चाहिए। "स्वामित्व" अवधारणा केवल डेटाबेस संगठन के बारे में है, और आपका कोड पूरी तरह से अनजान होना चाहिए। –

+0

आपके पास एक बिडरेक्शनल एसोसिएशन है: जब आप एक foo में बार जोड़ते हैं, तो बार में foo भी जोड़ें। –

1

mappedBy हाइबरनेट को बताता है कि रिश्ते का कौन सा पक्ष लिंक का मालिक है। OneToMany या OneToOne में, mappyedBy का उपयोग करके हाइबरनेट को बताता है कि अन्य तालिका में एक विदेशी कुंजी होगी जिसका उपयोग लिंक को स्टोर करने के लिए किया जाएगा।

जब ManyToMany की बात आती है, तो एक तालिका में शामिल होता है, इसलिए न तो सीधे अन्य ऑब्जेक्ट का लिंक होता है। हालांकि, हाइबरनेट को अभी भी यह जानने की जरूरत है कि "स्वामित्व" पक्ष कौन सा है, यह जानता है कि संचालन कैसे करें।

+1

-1: मैप्डबी यह इंगित नहीं करता कि कौन सी तालिका में एक विदेशी कुंजी है, और इसका कैस्केड से कोई लेना देना नहीं है। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^