Den kode har to ting, der forhindrer den i at virke:
- Dine enheder har ingen
@Id
. Du har sikkert bare ladet det være, fordi dette er et eksempel, men det er værd at påpege. - Du har dobbelttilknyttet kolonnen
parent_id
. Barn har både et langt felt og et overordnet felt knyttet til den samme kolonne. Slip af med den lange. Det er forældreforholdet, du leder efter.
Derefter er det, du har der, en helt traditionel tovejs en-til-mange med en join-kolonne. Hvis det ikke virker for dig, så gør du noget forkert i koden, hvor du opretter og gemmer dem. Det er meget sandsynligt, at du ikke opretter objekterne korrekt. Korrekt kode ved hjælp af disse entiteter ville se sådan ud:
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();
Bemærk især, at barnet skal sættes i forælderen såvel som forælderen i barnet. Byg ikke en halvt ødelagt objektmodel, og forvent at Hibernate rydder op i dit rod. Mange mennesker ignorerer dette tilsyneladende indlysende krav og undrer sig over, hvorfor Hibernate virker ustabil og/eller upålidelig.