2009-06-26 17 views
5

मैं डेटाबेस स्कीमा के लिए एक हाइबरनेट परत बनाने की कोशिश कर रहा हूं, जिसका मेरे पास अनिवार्य रूप से कोई नियंत्रण नहीं है। सरलीकृत, दो टेबल हैं।हाइबरनेट: एक से कई रिश्ते में कॉलम निर्दिष्ट करना

  • parent_id, पूर्णांक, प्राथमिक कुंजी, autoincremented
  • parent_code, स्ट्रिंग, अद्वितीय कुंजी, एक ब्लैक बॉक्स द्वारा उत्पन्न कहीं (मान लीजिए कि यह एक UUID है करते हैं:

    टेबल parent दो महत्वपूर्ण स्तंभ हैं विवेक की खातिर)

  • प्लस डेटा के स्तंभों का एक समूह के लिए
  • child_parent_id, पूर्णांक, प्राथमिक कुंजी, autoincremented
  • child_parent_code, माता पिता की parent_code मूल्य
  • में स्ट्रिंग, विदेशी कुंजी की ओर इशारा करते प्लस डेटा
  • के स्तंभों में से एक गुच्छा: 10 टेबल child दो महत्वपूर्ण स्तंभ हैं

मैं माता-पिता.getChilds() को कॉल करने और बाल वस्तुओं का संग्रह प्राप्त करने में सक्षम होना चाहता हूं। लेकिन हाइबरनेट मैपिंग फाइलों को स्थापित करना असंभव लगता है। नीचे दिए गए मैपिंग के साथ यह क्या कर रहा है child तालिका parent_id मान (parent_code के बजाय) के साथ खोज रहा है।

Parent.hbm.xml में:

<set name="childs" inverse="true" lazy="true" table="child" fetch="select"> 
     <key> 
      <column name="child_parent_code" not-null="true" /> 
     </key> 
     <one-to-many class="foo.bar.Child" /> 
    </set> 

Child.hbm.xml में:

<many-to-one name="parent" class="foo.bar.Parent" fetch="select"> 
     <column name="child_parent_code" not-null="true" /> 
    </many-to-one> 

मैं हाइबरनेट साथ जावा हठ की मेरी नकल के माध्यम से poring एक घंटे खर्च किया है, लेकिन मैं समझ नहीं कैसे कर सकते हैं जो मैं चाहता हूं उसे करने के लिए। क्या यह संभव है?

उत्तर

4

माता-पिता में कुछ इस तरह का प्रयास करें::

<set name="childs" inverse="true" lazy="true" table="child" fetch="select"> 
    <key column="child_parent_code" property-ref="code" /> 
    <one-to-many class="foo.bar.Child" /> 
</set> 

और इस बच्चे में:

<many-to-one name="parent" class="foo.bar.Parent" 
    fetch="select" column="child_parent_code" property-ref="code" /> 

मुझे लगता है कि मान लिया है

यहाँ एनोटेशन प्रारूप में कोड है माता-पिता में कोड संपत्ति को "कोड" कहा जाता है।

+0

संपत्ति-रेफरी विशेषता पूरी तरह से काम करती है। धन्यवाद! – Plutor

+0

कोई समस्या नहीं, खुशी हुई इससे मदद मिली। –

+0

@DavidM क्या हाइबरनेट में संपत्ति-रेफ समकक्ष एनोटेशन है? –

12

मैं हाइबरनेट एनोटेशन का उपयोग करने पर विचार करता हूं। मैंने उन्हें एक्सएमएल परिभाषाओं के साथ काम करने के लिए बहुत आसान पाया।

@Entity 
@Table(name="parent") 
public class Parent 
{ 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private int id; 

    @ManyToOne 
     @JoinColumn(name="child", referencedColumnName = "id") 
    private Child child; 
} 

@Entity 
@Table(name = "child") 
public class Child 
{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    public int id; 

    @Column(name = "code") 
    public String code; 
} 
+0

यह वास्तविक प्रश्न के लिए प्रासंगिक नहीं है? –

+6

यह संबंधित है और व्यक्तिगत रूप से मुझे यह बहुत उपयोगी लगता है। –

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