sql >> Database >  >> RDS >> Mysql

@OneToMany-fouten in MySQL:kan een bovenliggende rij niet verwijderen of bijwerken:een beperking van een externe sleutel mislukt

Je hebt twee fouten.

Eerste fout:u heeft de bidirectionele associatie tussen koptekst en details twee keer in kaart gebracht:één keer in de kop en één keer in de details. Als u een bidirectionele associatie hebt, moet een van de zijden (in dit geval de ene kopzijde) worden gedeclareerd als de inverse van de andere zijde, met behulp van de mappedBy kenmerk:

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

Tweede fout:de DELETE-cascade wordt alleen toegepast wanneer u de Session.delete() gebruikt methode om de entiteit te verwijderen. Query's verwijderen omzeilen de sessie volledig (wat betekent dat de entiteiten die door de query zijn verwijderd maar eerder zijn geladen in de sessie blijven, in dezelfde staat alsof er geen query was uitgevoerd).

Dus om de verwijdering trapsgewijs te laten verlopen, moet je een selectiequery uitvoeren om alle te verwijderen headers te vinden, en dan deze headers doorlopen en ze verwijderen met session.delete() .




  1. SQL DML:onjuiste datumwaarde (MySQL)

  2. Hoe laat u uw database veel talen spreken?

  3. Is een kandidaat-sleuteldeterminant goed genoeg voor BCNF?

  4. TransactSQL om een ​​ander TransactSQL-script uit te voeren