उस कोड में दो चीजें हैं जो इसे काम करने से रोकती हैं:
- आपकी संस्थाओं के पास कोई
@Id
नहीं है . आपने शायद इसे अभी छोड़ दिया क्योंकि यह एक उदाहरण है, लेकिन यह ध्यान देने योग्य है। - आपने कॉलम को डबल-मैप किया है
parent_id
. बच्चे के पास एक ही कॉलम में मैप किए गए लंबे फ़ील्ड और पैरेंट फ़ील्ड दोनों हैं। लॉन्ग से छुटकारा पाएं। यह माता-पिता का रिश्ता है जिसके बाद आप हैं।
उसके बाद, आपके पास एक जॉइन कॉलम के साथ एक पूरी तरह से पारंपरिक द्विदिश एक-से-कई है। यदि यह आपके लिए काम नहीं कर रहा है, तो आप उस कोड में कुछ गलत कर रहे हैं जहां आप उन्हें बनाते और सहेजते हैं। बहुत शायद, आप वस्तुओं को ठीक से नहीं बना रहे हैं। इन निकायों का उपयोग करने वाला सही कोड कुछ इस तरह दिखाई देगा:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Parent p = new Parent();
Child child = new Child();
child.parent = p;
Child child1 = new Child();
child1.parent = p;
p.children = Arrays.asList(child, child1);
session.save(p);
session.save(p.children.get(0));
session.save(p.children.get(1));
tx.commit();
विशेष रूप से ध्यान दें कि बच्चे में माता-पिता के साथ-साथ माता-पिता में भी बच्चे को स्थापित किया जाना चाहिए। आधा टूटा हुआ ऑब्जेक्ट मॉडल न बनाएं और हाइबरनेट से आपकी गड़बड़ी को साफ करने की अपेक्षा करें। बहुत से लोग इस स्पष्ट रूप से स्पष्ट आवश्यकता को अनदेखा करते हैं और आश्चर्य करते हैं कि हाइबरनेट अस्थिर और/या अविश्वसनीय क्यों लगता है।