sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo completar valores de clave externa en una configuración Hibernate + Spring JPA cuando los objetos padre/hijo se conservan al mismo tiempo?

Ese código tiene dos cosas que le impiden funcionar:

  1. Sus entidades no tienen @Id . Probablemente lo dejó porque este es un ejemplo, pero vale la pena señalarlo.
  2. Ha mapeado dos veces la columna parent_id . El secundario tiene un campo largo y un campo primario asignados a la misma columna. Deshazte del Largo. Lo que busca es la relación con los padres.

Después de eso, lo que tienes allí es un uno a muchos bidireccional completamente tradicional con una columna de unión. Si no funciona para usted, entonces está haciendo algo mal en el código donde los crea y los guarda. Muy probablemente, no está creando los objetos correctamente. El código correcto que usa estas entidades se vería así:

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

Nótese especialmente que el hijo debe estar en el padre así como el padre en el hijo. No construya un modelo de objetos medio roto y espere que Hibernate limpie su desorden. Muchas personas ignoran este requisito aparentemente obvio y se preguntan por qué Hibernate parece inestable y/o poco confiable.