Tento kód má dvě věci, které mu brání v práci:
- Vaše entity nemají
@Id
. Pravděpodobně jste to právě vynechali, protože toto je příklad, ale stojí za to upozornit. - Dvakrát jste namapovali sloupec
parent_id
. Dítě má dlouhé pole i nadřazené pole namapované na stejný sloupec. Zbavte se Longa. Jde o rodičovský vztah, o který vám jde.
Poté, co tam máte, je zcela tradiční obousměrné one-to-many se sloupcem spojení. Pokud vám to nefunguje, pak děláte něco špatně v kódu, kde je vytváříte a ukládáte. Velmi pravděpodobně nevytváříte objekty správně. Správný kód využívající tyto entity by vypadal asi takto:
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();
Všimněte si zejména, že dítě by mělo být nastaveno v rodiči stejně jako rodič v dítěti. Nestavějte polorozbitý objektový model a nečekejte, že hibernace uklidí váš nepořádek. Mnoho lidí tento zdánlivě zřejmý požadavek ignoruje a diví se, proč se Hibernate zdá nestabilní a/nebo nespolehlivá.