sql >> Base de Datos >  >> RDS >> Mysql

Errores de @OneToMany en MySQL:no se puede eliminar o actualizar una fila principal:falla una restricción de clave externa

Tienes dos errores.

Primer error:mapeó la asociación bidireccional entre el encabezado y los detalles dos veces:una en el encabezado y otra en los detalles. Cuando tiene una asociación bidireccional, uno de los lados (el lado del encabezado, en este caso) debe declararse como el inverso del otro lado, usando el mappedBy atributo:

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

Segundo error:la cascada DELETE solo se aplica cuando usa Session.delete() método para eliminar la entidad. Las consultas de eliminación omiten la sesión por completo (lo que significa que las entidades eliminadas por la consulta pero cargadas previamente permanecen en la sesión, en el mismo estado que si no se hubiera ejecutado ninguna consulta).

Por lo tanto, para eliminar en cascada, tendrá que ejecutar una consulta de selección para encontrar todos los encabezados para eliminar, y luego recorrer estos encabezados y eliminarlos usando session.delete() .