在OneToMany关系中删除父级后,“无法删除或更新父级行”

时间:2019-04-06 17:22:23

标签: java mysql hibernate

我得到了错误

Cannot delete or update a parent row: a foreign key constraint fails (`gestion_ejercicios_programacion`.`examen`, CONSTRAINT `examen_ibfk_1` FOREIGN KEY (`titulacionID`) REFERENCES `titulacion` (`id`))

当尝试使用休眠删除实体时。这是我主要要做的事情:

TitulacionDAO tDAO = context.getBean(TitulacionDAO.class);
Titulacion t1 = new Titulacion("titulacion 1");
tDAO.save(t1);

ExamenDAO exDAO = context.getBean(ExamenDAO.class);
Examen ex1 = new Examen(3, 11, "examen 1", t1);
exDAO.save(ex1);

tDAO.delete(t1);

这里是我的Titulacion的Examen映射

@ManyToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name="titulacionID", referencedColumnName="id")
private Titulacion titulacion;

这是我针对Examen的Titulacion映射

@OneToMany(cascade=CascadeType.REMOVE, mappedBy="titulacion", orphanRemoval=true)
private Set<Examen> examenes = new HashSet<>();

这是我的数据库:

CREATE TABLE examen (

    id INT AUTO_INCREMENT PRIMARY KEY,
    mes INT(2),
    ano INT(4),
    descripcion VARCHAR(1000),
    titulacionID INT,

    FOREIGN KEY (titulacionID) REFERENCES titulacion(id)

);

CREATE TABLE titulacion (

    id INT AUTO_INCREMENT PRIMARY KEY PRIMARY KEY,
    nombre VARCHAR(100)

);

我不知道为什么会这样,我已经阅读了有关该主题的几篇文章,并且从我阅读的内容来看,这应该是可行的。感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您没有将考生添加到Titulacion中。因此,在删除titilacion时,Hibernate不知道也需要删除该考卷