2012-03-26 11 views
13

कहो, मैं संस्थाओं निम्नलिखित है:@OneToMany साथ एम्बेड करने योग्य इकाई विशेषता

@Entity 
public class A { 
    @Id 
    @GeneratedValue 
    private Long id; 

    @Embedded 
    private B b; 

    //getters and setters 
} 

@Embeddable 
public class B { 
    @OneToMany 
    private List<C> cList; 
    //getters and setters 
} 

@Entity 
public class C { 
    @Id 
    @GeneratedValue 
    private Long id; 
    //other fields, getters and setters 
} 

मैं एक अतिरिक्त तालिका जो A और C बीच मैपिंग शामिल मिल Hibernate साथ स्कीमा-autogeneration सुविधा का उपयोग करना। लेकिन मैं A के आईडीC () अतिरिक्त तालिका के बिना जोड़कर एक से कई रिश्तों को लागू करना चाहता हूं)।

क्या यह संभव है? यदि हां, तो ऐसी मैपिंग बनाने के लिए मुझे किस एनोटेशन का उपयोग करना चाहिए?

उत्तर

7

सामान्यतः @JoinColumn एनोटेशन के साथ संभव है। यह एम्बेड करने योग्य के साथ भी काम करता है।

@OneToMany 
@JoinColumn(name="A_ID") 
private List<C> cList; 

आप एम्बेड होने में दिए गए स्तंभ के लिए A_ID नाम से खुश नहीं हैं, तो आप इकाई ए में स्तंभ नाम ओवरराइड कर सकते हैं:

@AssociationOverride(name= "cList", 
     joinColumns = @JoinColumn(name="SOME_NAME_FOR_JOIN_COLUMN_IN_TABLE_C")) 
@Embedded 
private B b; 
+0

लेकिन मैं कैसे निर्दिष्ट करते हैं, कि 'A_ID' के पहचानकर्ता है इकाई 'ए'? – jFrenetic

+0

आपको यह निर्दिष्ट करने की ज़रूरत नहीं है कि बी में दिए गए मैपिंग का मूल्यांकन ए के संदर्भ में किया जाता है और यही कारण है कि आपका दृढ़ता प्रदाता इसे जानता है। या हो सकता है कि आप कॉलम नाम में शामिल होने के लिए ओवरराइड कैसे करें - मैंने जवाब देने के लिए उदाहरण जोड़ा। –

+0

बहुत बहुत धन्यवाद! यह मेरे लिए काम किया। मैंने सोचा कि मुझे दृढ़ता से प्रदाता प्रदाता को यह बताने की ज़रूरत है कि किस आईडी को 'आईडी' से प्राप्त किया जाए, लेकिन यह थोड़ा समझदार हो गया :) – jFrenetic

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