Quel codice ha due cose che gli impediscono di funzionare:
- Le tue entità non hanno
@Id
. Probabilmente l'hai semplicemente interrotto perché questo è un esempio, ma vale la pena segnalarlo. - Hai eseguito una doppia mappatura della colonna
parent_id
. Il figlio ha sia un campo lungo che un campo padre mappati sulla stessa colonna. Sbarazzati del Lungo. È la relazione con i genitori che stai cercando.
Dopodiché, quello che hai lì è un uno-a-molti bidirezionale completamente tradizionale con una colonna di join. Se non funziona per te, stai sbagliando qualcosa nel codice in cui li crei e li salvi. Molto probabilmente, non stai creando gli oggetti correttamente. Il codice corretto che utilizza queste entità sarebbe simile a questo:
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();
Nota in particolare che il bambino dovrebbe essere impostato nel genitore così come il genitore nel bambino. Non creare un modello a oggetti mezzo rotto e aspettarti che Hibernate ripulisca il tuo pasticcio. Molte persone ignorano questo requisito apparentemente ovvio e si chiedono perché Hibernate sembri instabile e/o inaffidabile.