Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SpringDataJPA zapisywanie relacji OneToOne uzyskiwanie Nie można dodać ani zaktualizować wiersza podrzędnego:ograniczenie klucza obcego nie działa

Problemem jest prawdopodobnie strategia generowania identyfikatora (pod warunkiem, że prawidłowo zainicjalizowałeś kontakt). Obiekt użytkownika musi zostać wstawiony do DB, aby ustawić swój identyfikator, ale w tym samym czasie Kontakt potrzebuje tego identyfikatora, aby był prawidłowym obiektem. Obaj muszą się w tej samej transakcji.

Jeśli przełączysz poziom rejestrowania na odpowiedni dla Twojego JPA (w perstitance.xml), najprawdopodobniej zobaczysz sekwencję wstawiania użytkownika i kontaktu, ale kontakt będzie miał identyfikator użytkownika 0.

Tak więc, a) upewnij się, że wyraźnie ustawiłeś użytkownika w swoim kontakcie (jak powiedziałeś, relacja jest zarządzana przez Kontakt. b) Ustaw kontakt na użytkownika. c) trwać (w jednej transakcji). W zależności od Twojej implementacji JPA może nadal nie działać (sprawdź wystawione zapytania, najprawdopodobniej będzie insert na kontakcie, a potem aktualizacja). Zmień strategię generowania na TABLE, z TABLE JPA pobiera następny wolny identyfikator, przypisuje go do obiektu i wykonuje wstawianie, aby był „znany” przed wstawieniem.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć tabelę przestawną w MySQL

  2. Jak mogę cofnąć instrukcję mysql, którą właśnie wykonałem?

  3. prześlij obraz do bazy danych mysql php

  4. Jak używać DELETE ON CASCADE w relacji wiele do jednego?

  5. Wyzwalacz MySQL przed usunięciem, aby uniknąć usuwania wielu wierszy