Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Erros @OneToMany no MySQL:não é possível excluir ou atualizar uma linha pai:uma restrição de chave estrangeira falha


Você tem dois erros.

Primeiro erro:você mapeou a associação bidirecional entre o cabeçalho e os detalhes duas vezes:uma no cabeçalho e outra nos detalhes. Quando você tem uma associação bidirecional, um dos lados (o lado do cabeçalho, neste caso) deve ser declarado como o inverso do outro lado, usando o 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 erro:a cascata DELETE só é aplicada quando você usa o Session.delete() método para excluir a entidade. As consultas de exclusão ignoram totalmente a sessão (o que significa que as entidades excluídas pela consulta, mas carregadas anteriormente, permanecem na sessão, no mesmo estado como se nenhuma consulta tivesse sido executada).

Portanto, para cascatear a exclusão, você terá que executar uma consulta de seleção para encontrar todos os cabeçalhos a serem excluídos e, em seguida, percorrer esses cabeçalhos e excluí-los usando session.delete() .