Hibernate throws无法删除或更新父行:外键约束失败

我正在研究一个测试cascade delete操作的基本示例,但我得到了exception。

我有以下实体:

Employee.java

 @Entity public class Employee { @Id @Column(name = "EMP_ID") private long id; private String name; @OneToMany(mappedBy = "employee") @Cascade(value = { CascadeType.REMOVE, CascadeType.SAVE_UPDATE }) private List details = new ArrayList(); } 

EmpDetails.java

 @Entity public class EmpDetails { @Id private long id; private int info; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "EMP_ID") private Employee employee; } 

现在我在数据库中有员工ID为10的记录以及员工详细信息表中的相应记录。

现在当我运行以下查询时:

  session.beginTransaction(); session.delete(new Employee(10)); // here 10 is the ID of the employee session.getTransaction().commit(); session.close(); 

我认为hibernate将删除员工记录和相应的员工详细信息记录,因为我已设置要删除的级联类型。 但我得到例外:

引起:com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败

有人可以帮我看看如何在这里测试级联删除选项吗?

REMOVE级联类型用于标准JPA remove()操作。 对于本机Hibernate delete()操作,您需要使用Hibernate专有的注释 :

 @Cascade(CascadeType.DELETE)