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

Błędy @OneToMany w MySQL:Nie można usunąć lub zaktualizować wiersza nadrzędnego:ograniczenie klucza obcego nie powiodło się

Masz dwa błędy.

Pierwszy błąd:dwukierunkowe powiązanie między nagłówkiem a szczegółami zostało zmapowane dwukrotnie:raz w nagłówku i raz w szczegółach. Gdy masz skojarzenie dwukierunkowe, jedna ze stron (w tym przypadku jedna strona nagłówka) musi być zadeklarowana jako odwrotność drugiej strony, używając mappedBy atrybut:

@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "reminderHeader")
@Cascade(value = { CascadeType.SAVE_UPDATE, CascadeType.DELETE })
@Fetch(FetchMode.SELECT)
private Set<ReminderDetails> reminderDetailslist;

Drugi błąd:kaskada DELETE jest stosowana tylko wtedy, gdy używasz Session.delete() metoda usunięcia jednostki. Zapytania usuwające całkowicie omijają sesję (co oznacza, że ​​encje usunięte przez zapytanie, ale wcześniej załadowane, pozostają w sesji, w takim samym stanie, jak gdyby żadne zapytanie nie zostało wykonane).

Tak więc, aby kaskadowo usunąć, musisz wykonać zapytanie wybierające, aby znaleźć wszystkie nagłówki do usunięcia, a następnie wykonać pętlę nad tymi nagłówkami i usunąć je za pomocą session.delete() .




  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 zamówić odpowiedź JSON na podstawie relacji z bazą danych za pomocą eloquent

  2. com.mysql.jdbc.exceptions.MySQLSyntaxErrorException podczas korzystania z PreparedStatement

  3. Usuń z jednego stołu z dołącz

  4. MySQL FIND_IN_SET() nie działa zgodnie z oczekiwaniami

  5. Jak używać PATCH do aktualizacji prostego pola bazy danych?