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

SpringDataJPA salva la relazione OneToOne che ottiene Impossibile aggiungere o aggiornare una riga figlio:un vincolo di chiave esterna non riesce

Il problema è probabilmente la tua strategia di generazione dell'ID (a condizione che tu abbia inizializzato correttamente il contatto). L'oggetto utente deve essere inserito nel DB per avere il suo ID impostato, ma allo stesso tempo il Contatto ha bisogno che questo ID sia un oggetto valido. Entrambi devono avviene nella stessa transazione.

Se cambi il livello di registrazione su fine per il tuo JPA (in perstitance.xml), molto probabilmente vedrai la sequenza di inserimento dell'utente e del contatto ma il contatto avrà user_id 0.

Quindi, a) assicurati di impostare esplicitamente l'utente nel tuo contatto (come hai detto che la relazione è gestita da Contact. b) Imposta il contatto sull'utente. c) persistere (in una transazione). A seconda della tua implementazione JPA potrebbe ancora non funzionare (controlla le query emesse, molto probabilmente ci sarà inserimento al contatto e quindi aggiornamento). Cambia la strategia di generazione in TABLE, con TABLE JPA prende il successivo ID libero, lo assegna all'oggetto e fa l'inserimento in modo che sia "conosciuto" prima dell'inserimento.