sql >> Databáze >  >> RDS >> Mysql

Chyby @OneToMany v MySQL:Nelze odstranit nebo aktualizovat nadřazený řádek:omezení cizího klíče selže

Máte dvě chyby.

První chyba:obousměrné spojení mezi záhlavím a podrobnostmi jste mapovali dvakrát:jednou v záhlaví a jednou v podrobnostech. Když máte obousměrné přidružení, jedna strana (v tomto případě jedna strana záhlaví) musí být deklarována jako inverzní strana druhé strany pomocí mappedBy atribut:

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

Druhá chyba:kaskáda DELETE se použije pouze při použití Session.delete() způsob odstranění entity. Dotazy Delete zcela vynechají relaci (to znamená, že entity odstraněné dotazem, ale dříve načtené, zůstanou v relaci ve stejném stavu, jako kdyby nebyl proveden žádný dotaz).

Chcete-li tedy provést mazání kaskádovitě, budete muset provést výběrový dotaz, abyste našli všechna záhlaví, která chcete odstranit, a poté tato záhlaví ve smyčce a smažte je pomocí session.delete() .




  1. mysqldump provádí částečnou zálohu - neúplný výpis tabulky

  2. MySQL 8 Výpočet průměru podle rozdělení podle data

  3. Architektura databáze pro miliony nových řádků denně

  4. Aktualizujte DataTable na MySql databázi C#