Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment remplir les valeurs de clé étrangère dans une configuration Hibernate + Spring JPA lorsque les objets parent/enfant sont persistants en même temps ?

Ce code a deux choses qui l'empêchent de fonctionner :

  1. Vos entités n'ont pas de @Id . Vous l'avez probablement laissé de côté car il s'agit d'un exemple, mais cela vaut la peine d'être souligné.
  2. Vous avez double-mappé la colonne parent_id . Enfant a à la fois un champ Long et un champ Parent mappés sur la même colonne. Débarrassez-vous du Long. C'est la relation Parent que vous recherchez.

Après cela, vous avez là un un-à-plusieurs bidirectionnel complètement traditionnel avec une colonne de jointure. Si cela ne fonctionne pas pour vous, alors vous faites quelque chose de mal dans le code où vous les créez et les enregistrez. Très probablement, vous ne créez pas les objets correctement. Un code correct utilisant ces entités ressemblerait à ceci :

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();

Notez en particulier que l'enfant doit être défini dans le parent ainsi que le parent dans l'enfant. Ne construisez pas un modèle d'objet à moitié cassé et attendez-vous à ce qu'Hibernate nettoie votre désordre. Beaucoup de gens ignorent cette exigence apparemment évidente et se demandent pourquoi Hibernate semble instable et/ou peu fiable.