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

SpringDataJPA guarda la relación OneToOne No se puede agregar o actualizar una fila secundaria:falla una restricción de clave externa

El problema probablemente sea su estrategia de generación de ID (siempre que haya inicializado el contacto correctamente). El objeto de usuario debe insertarse en la base de datos para establecer su ID, pero al mismo tiempo el contacto necesita que esta ID sea un objeto válido. Ambos tienen que suceder en la misma transacción.

Si cambia el nivel de registro a fino para su JPA (en perstitance.xml), lo más probable es que vea la secuencia de insertar el usuario y el contacto, pero el contacto tendrá user_id 0.

Entonces, a) asegúrese de establecer un usuario explícito en su contacto (como dijo, la relación es administrada por Contacto. b) Establezca el contacto en el usuario. c) persistir (en una transacción). Dependiendo de su implementación de JPA, es posible que aún no funcione (verifique las consultas emitidas, lo más probable es que se inserte en el contacto y luego se actualice). Cambie la estrategia de generación a TABLE, con TABLE JPA toma la siguiente ID libre, la asigna al objeto y realiza la inserción para que sea "conocido" antes de la inserción.