2011-11-17 26 views
21

मेरे जावा बीन्स में मेरे कई रिश्ते हैं। जब मैं List का उपयोग की तरह के रूप में अपने चर निर्धारित करने:कई रिश्ते सेट या सूची में कई लोगों को हाइबरनेट करें?

@Entity 
@Table(name="ScD") 
public class Group extends Nameable { 

    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER) 
    @JoinColumn(name="b_fk") 
    private List<R> r; 
    //or 
    private Set<R> r; 

मुझे लगता है कि त्रुटि मिलती है:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' 
... 

मैं Set सब कुछ का उपयोग अच्छी तरह से काम करने लगते हैं जब।

मुझे लगता है कि पूछना चाहता हूँ जब जो एक तार्किक अवधारणा List या Set के लिए उपयोग करने के लिए (सूची की वजह से डुप्लिकेट और सेट लेकिन क्या प्रदर्शन और अन्य मुद्दों के बारे में हो सकता है) कई रिश्तों के लिए कई का उपयोग कर?

उत्तर

52

संबंधपरक डेटाबेस परिप्रेक्ष्य से यह एक सेट है। डेटाबेस ऑर्डर को सुरक्षित नहीं करते हैं और List का उपयोग करके व्यर्थ है, उनमें ऑर्डर अनिर्दिष्ट है (जब तक अनुक्रमित संग्रह) का उपयोग नहीं किया जाता है।

Set का उपयोग करने से भी बहुत अच्छा प्रदर्शन प्रभाव पड़ता है। जब List का उपयोग किया जाता है, तो हाइबरनेट PersistentBag संग्रह का उपयोग करता है जिसके नीचे कुछ भयानक विशेषताएं होती हैं। I.e .: यदि आप एक नया रिश्ता जोड़ते हैं तो यह पहले सभी मौजूदा लोगों को हटा देगा और फिर उन्हें वापस + अपना नया डालें। Set के साथ यह सिर्फ नए रिकॉर्ड को सम्मिलित करता है।

तीसरा बात - आप के रूप में आप एक साथ कई बैग को नहीं लाया जा सकता है अपवाद कुख्यात मिल जाएगा एक इकाई में एक से अधिक List रों नहीं हो सकता।

यह भी देखें:

+0

कई रिश्तों के लिए कई लोगों के अलावा (एक-एक, कई-एक, एक-कई) क्या मुझे एक अच्छी डिजाइन पैटर्न के लिए 'सूची' के बजाय 'सेट' का उपयोग करना चाहिए? – kamaci

+0

हां, क्योंकि 'सूची' से पता चलता है कि वस्तुओं का आदेश दिया गया है जो सत्य नहीं है। मुझे पता है, मुझे पता है कि यह थोड़ा आसान एपीआई है। –

+3

दोनों विस्तृत जानकारी और अच्छे लिंक के उत्तर के रूप में स्वीकार करते हुए मतदान कर रहे हैं। – kamaci

3

कैसे सेट से विशिष्टता आवश्यकता के बारे में? क्या यह बल यह सुनिश्चित करने के लिए संग्रह में जोड़े जाने पर हर बार सभी ऑब्जेक्ट्स को पुनर्प्राप्त करने के लिए हाइबरनेट नहीं करता है कि नया जोड़ा गया अद्वितीय है? एक सूची में यह सीमा नहीं होगी।

+1

सूची में यह सीमा भी है, क्योंकि लिबरों में हाइबरनेट को प्रेसेवर ऑर्डर की आवश्यकता होती है, इसलिए इसे सभी वस्तुओं को भी पुनर्प्राप्त करना होगा –

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