@OneToMany और @ElementCollection में अंतर?


129

एक-से-कई संबंधों पर काम करने के बाद से एक @OneToManyऔर @ElementCollectionएनोटेशन का उपयोग करने में क्या अंतर है ?


3
संक्षेप में, @ElementCollection का उपयोग तब किया जाता है जब मूल इकाई के बिना बच्चे-इकाई का अस्तित्व निरर्थक होता है, IOW, जब भी कोई मूल इकाई निकाली जाती है, तो आपके बच्चे भी ...
dellasavia

1
मेरा मानना ​​है कि यह बाल इकाई नहीं है, यह मूल्य प्रकार / मूल्य वस्तु है जो एम्बेडेड है और जिसका अस्तित्व मुख्य इकाई के बिना कम अर्थ है जिसमें यह निहित है।
उत्सुकमुंड

@CuriousMind से सहमत, JPA में 'इकाई' का अपना जीवनचक्र है।
म्हारासलेही

जवाबों:


124

मेरा मानना @ElementCollectionहै कि मुख्य रूप से गैर-संस्थाओं (एम्बेड करने योग्य या बुनियादी) की मैपिंग के लिए है, जबकि @OneToManyइसका उपयोग संस्थाओं को मैप करने के लिए किया जाता है। तो जो आप उपयोग करना चाहते हैं उस पर निर्भर है।


1
उत्तर के लिए धन्यवाद पेडर! आपके पास एक वैध बिंदु है क्योंकि @OneToMany केवल संस्थाओं से संबंधित हो सकता है।
n_g

157

ElementCollectionएक मानक जेपीए एनोटेशन है, जिसे अब मालिकाना हाइबरनेट एनोटेशन पर पसंद किया जाता है CollectionOfElements

इसका मतलब है कि संग्रह संस्थाओं का संग्रह नहीं है, बल्कि सरल प्रकारों (स्ट्रिंग्स, आदि) का संग्रह या एम्बेड करने योग्य तत्वों का संग्रह (वर्ग एनोटेट के साथ @Embeddable) है।

इसका अर्थ यह भी है कि तत्व पूरी तरह से युक्त संस्थाओं के स्वामित्व में हैं: वे संशोधित किए जाते हैं जब इकाई को संशोधित किया जाता है, इकाई को हटाए जाने पर हटा दिया जाता है, आदि। उनका अपना जीवनचक्र नहीं हो सकता है।


... और आप उन्हें अपने दम पर क्वेरी नहीं कर सकते।
फंसे

66

@ElementCollectionजब आप सरल या एम्बेडेड प्रकार के साथ एक-से-कई संबंधों को लागू करना चाहते हैं, तो आपको कोड को सरल बनाने की अनुमति देता है। उदाहरण के लिए JPA 1.0 में जब आप s- की सूची में एक-से-कई संबंध Stringबनाना चाहते थे, तो आपको एक साधारण इकाई POJO ( StringWrapper) बनाना होगा जिसमें केवल प्राथमिक कुंजी हो और Stringप्रश्न में:

@OneToMany
private Collection<StringWrapper> strings;

//...

public class StringWrapper {
  @Id
  private int id;

  private String string;
}

JPA 2.0 के साथ आप बस लिख सकते हैं:

@ElementCollection
private Collection<String> strings;

सरल, है ना? ध्यान दें कि आप अभी भी @CollectionTableएनोटेशन का उपयोग करके तालिका और स्तंभ नामों को नियंत्रित कर सकते हैं ।

यह सभी देखें:


तर्क के लिए महान व्याख्या। :)
फुआ ये केट

4

बेसिक या एंबेडेड : @ElementCollection
Entities : @OneToMany या @ManyToMany

@ElementCollection:

  • संबंध उस इकाई द्वारा प्रबंधित (केवल) है जिसमें संबंध परिभाषित किया गया है
  • तालिका में स्वयं की इकाई के साथ-साथ बुनियादी या एम्बेडेड विशेषताओं का आईडी संदर्भ होता है

@OneToMany / @ManyToMany:

  • अन्य इकाई द्वारा भी प्रबंधित किया जा सकता है
  • ज्वाइन टेबल या कॉलम (ओं) में आमतौर पर केवल आईडी संदर्भ होते हैं

1

@ElementCollectionएक संग्रह चिह्नित करता है। यह जरूरी नहीं है कि यह संग्रह 1-एन जॉइन का संदर्भ देता है।


1
तो आखिर @ElementCollection का उद्देश्य क्या है?
n_g

0

ElementCollection मैपिंग, या उनके संग्रह के लिए तालिका को ओवरराइड कर सकता है, इसलिए आपके पास कई इकाइयां एक ही एम्बेड करने योग्य वर्ग का संदर्भ हो सकती हैं, लेकिन प्रत्येक ने अपनी निर्भर वस्तुओं को एक अलग तालिका में संग्रहीत किया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.