Die code heeft twee dingen waardoor hij niet werkt:
- Uw entiteiten hebben geen
@Id
. Je hebt het waarschijnlijk gewoon weggelaten omdat dit een voorbeeld is, maar het is het vermelden waard. - U heeft de kolom
parent_id
dubbel toegewezen . Onderliggend heeft zowel een lang veld als een bovenliggend veld toegewezen aan dezelfde kolom. Weg met de Lange. Het is de ouderrelatie die je zoekt.
Wat je daarna hebt, is een volledig traditionele bidirectionele één-op-veel met een join-kolom. Als het niet voor u werkt, doet u iets verkeerd in de code waarin u ze maakt en opslaat. Zeer waarschijnlijk maakt u de objecten niet goed. Correcte code die deze entiteiten gebruikt, ziet er ongeveer zo uit:
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();
Merk vooral op dat het kind zowel in de ouder als de ouder in het kind moet worden geplaatst. Bouw geen half-gebroken objectmodel en verwacht dat Hibernate je rotzooi opruimt. Veel mensen negeren deze schijnbaar voor de hand liggende vereiste en vragen zich af waarom Hibernate onstabiel en/of onbetrouwbaar lijkt.