Den koden har två saker som hindrar den från att fungera:
- Dina enheter har ingen
@Id
. Du har förmodligen bara lämnat det eftersom det här är ett exempel, men det är värt att påpeka. - Du har dubbelmappat kolumnen
parent_id
. Underbarn har både ett långt fält och ett överordnat fält mappat till samma kolumn. Bli av med det långa. Det är föräldrarelationen du är ute efter.
Efter det, vad du har där är en helt traditionell dubbelriktad en-till-många med en sammanfogningskolumn. Om det inte fungerar för dig gör du något fel i koden där du skapar och sparar dem. Mycket troligt skapar du inte objekten ordentligt. Korrekt kod med dessa enheter skulle se ut ungefär så här:
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();
Observera särskilt att barnet ska vara inställt i föräldern såväl som föräldern i barnet. Bygg inte en halvtrasig objektmodell och förvänta dig att Hibernate ska städa upp i din röra. Många människor ignorerar detta till synes uppenbara krav och undrar varför Hibernate verkar instabilt och/eller opålitligt.