Mysql
 sql >> Database >  >> RDS >> Mysql

Come popolare i valori di chiave esterna in una configurazione Hibernate + Spring JPA quando gli oggetti padre/figlio vengono mantenuti contemporaneamente?

Quel codice ha due cose che gli impediscono di funzionare:

  1. Le tue entità non hanno @Id . Probabilmente l'hai semplicemente interrotto perché questo è un esempio, ma vale la pena segnalarlo.
  2. 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.