एक-से-कई संबंधों पर काम करने के बाद से एक @OneToMany
और @ElementCollection
एनोटेशन का उपयोग करने में क्या अंतर है ?
एक-से-कई संबंधों पर काम करने के बाद से एक @OneToMany
और @ElementCollection
एनोटेशन का उपयोग करने में क्या अंतर है ?
जवाबों:
मेरा मानना @ElementCollection
है कि मुख्य रूप से गैर-संस्थाओं (एम्बेड करने योग्य या बुनियादी) की मैपिंग के लिए है, जबकि @OneToMany
इसका उपयोग संस्थाओं को मैप करने के लिए किया जाता है। तो जो आप उपयोग करना चाहते हैं उस पर निर्भर है।
ElementCollection
एक मानक जेपीए एनोटेशन है, जिसे अब मालिकाना हाइबरनेट एनोटेशन पर पसंद किया जाता है CollectionOfElements
।
इसका मतलब है कि संग्रह संस्थाओं का संग्रह नहीं है, बल्कि सरल प्रकारों (स्ट्रिंग्स, आदि) का संग्रह या एम्बेड करने योग्य तत्वों का संग्रह (वर्ग एनोटेट के साथ @Embeddable
) है।
इसका अर्थ यह भी है कि तत्व पूरी तरह से युक्त संस्थाओं के स्वामित्व में हैं: वे संशोधित किए जाते हैं जब इकाई को संशोधित किया जाता है, इकाई को हटाए जाने पर हटा दिया जाता है, आदि। उनका अपना जीवनचक्र नहीं हो सकता है।
@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
एनोटेशन का उपयोग करके तालिका और स्तंभ नामों को नियंत्रित कर सकते हैं ।
बेसिक या एंबेडेड : @ElementCollection
Entities : @OneToMany या @ManyToMany
@ElementCollection:
@OneToMany / @ManyToMany:
ElementCollection मैपिंग, या उनके संग्रह के लिए तालिका को ओवरराइड कर सकता है, इसलिए आपके पास कई इकाइयां एक ही एम्बेड करने योग्य वर्ग का संदर्भ हो सकती हैं, लेकिन प्रत्येक ने अपनी निर्भर वस्तुओं को एक अलग तालिका में संग्रहीत किया है।