2010-03-03 9 views
5

हम एक Oracle डाटाबेस के खिलाफ हाइबरनेट एनोटेशन 3.4.0GA और हाइबरनेट कोर 3.3.2.GA (यह भी वर्तमान स्थिर संस्करण के रूप में जाना जाता है) का उपयोग कर रहेमूल्य आधार के साथ मैप किया = एक 1

हम बेस = 1 के साथ एक-से-कई मैपिंग जो लूइंग समय के लिए ठीक काम करता था, फिर भी पिछले हफ्ते हमने डेटाबेस में कुछ प्रविष्टियां पाईं, जहां इंडेक्स कॉलम में 0 का मान था जो सभी प्रकार की समस्याओं का कारण बनता था।

तो मेरा सवाल यह है: क्या किसी को एक-से-कई संबंधों के सूचकांक कॉलम में 0 का मान प्राप्त करने का कोई तरीका पता है, जब इसे आधार = 1 के साथ मैप किया जाता है? संभावित रूप से उपयोग जेनरिक या मैप्डसुपरक्लास से संबंधित है।

ध्यान दें कि कोड अपेक्षाकृत जटिल है, क्योंकि विरासत भी शामिल है।

निम्नलिखित वर्गों में से प्रासंगिक पीस हैं:

// SuperClass of the One side 
@MappedSuperclass 
public abstract class AbstractReihung<Tp, Tw, Te extends AbstractReihungElement<Tp, Tw>> 
{ 
    @OneToMany(cascade = CascadeType.ALL) 
    @Cascade(
    { 
     org.hibernate.annotations.CascadeType.ALL, 
     org.hibernate.annotations.CascadeType.DELETE_ORPHAN 
    }) 
    @JoinColumn(name = "parent_id", nullable = false) 
    @IndexColumn(name = "position", base = 1, nullable = false) 
    private List<Te> elements = new ArrayList<Te>(); 
} 

// Super Class of the Many side 
@MappedSuperclass 
public abstract class AbstractReihungElement<Tp, Tw> extends AbstractDbObject 
{ 
    @ManyToOne 
    @JoinColumn(name = "parent_id", insertable = false, updatable = false, nullable = false) 
    private Tp parent; 

    @Column(name = "position", insertable = false, updatable = false, nullable = false) 
    private int position; 
} 

वास्तविक कक्षाएं इन से विरासत और प्रकार पैरामीटर के लिए ठोस वर्ग प्रदान करते हैं। वे इकाई के रूप में मैप किए गए हैं। वे आईडी और संस्करण कॉलम के साथ-साथ कई अन्य विशेषताओं और संदर्भों को भी निर्दिष्ट करते हैं, लेकिन हाथ में मैपिंग से संबंधित कुछ भी नहीं।

+0

हाय जेन्स, मुझे आपके द्वारा वर्णित एक ही परिदृश्य का सामना करना पड़ रहा है, आखिरकार आपको यह पता चला कि यह समस्या कैसे होती है, या क्या आपको इसके लिए कोई समाधान मिल गया है ?, यह मेरा कोड है, http: // pastebin। कॉम/वी 6 एफआरबीएलएम – fujy

+0

इस प्रश्न और टिप्पणियों में वर्णित चीज़ों के मुकाबले मुझे इसके बारे में और अधिक जानकारी नहीं मिली। –

उत्तर

2

मुझे पता है कि यह लगभग दो साल हो गया है, लेकिन मैं इस समस्या के समाधान के दौरान इस पर ठोकर खाई। हम एक्सएमएल फाइलों के माध्यम से एचबीएम का उपयोग कर रहे हैं, इसलिए मुझे पूरा यकीन नहीं है कि इससे मदद मिलेगी। हमारे मामले में समस्या रिवर्स मैपिंग थी। यदि सूची (और अनुक्रमणिका) पर नियंत्रण सूची-तत्व पक्ष ("कई") पर था, तो आपके मामले में हमें समस्या थी। इसे आगे बढ़ाकर इसे हल किया गया। यह नहीं पता कि यह एनोटेशन के साथ कैसे किया जाता है।

त्रुटि के लिए एक अन्य स्रोत हो सकता है यदि आप अपने सार तत्व रिहायंग ऑब्जेक्ट पर "तत्व" सेट करते हैं। हाइबरनेट आलसी लोड गुणों के लिए प्रॉक्सी ऑब्जेक्ट्स का उपयोग करता है। यदि आप मौजूदा एक को संशोधित करने के बजाय एक नया नया संग्रह सेट करते हैं तो आप प्रॉक्सी ऑब्जेक्ट को ओवरराइट करते हैं।

+0

मैंने जवाब स्वीकार कर लिया क्योंकि यह प्रश्नों का उत्तर देता है। मैं अब और सत्यापित नहीं कर सकता कि यह वास्तव में उस समस्या को समझाता है जो हमारे पास था। –

+0

हाय जेन्स, आंद्रे, मुझे आपके द्वारा वर्णित एक ही परिदृश्य का सामना करना पड़ रहा है, आखिर में यह पता चला कि यह समस्या कैसे होती है, या क्या आपको इसके लिए कोई समाधान मिला? – fujy

+0

यह मेरे लिए मेरा कोड है, http://pastebin.com/V6FRBLMe – fujy

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