即使在启用Cascade All后,也无法从具有子记录的父表中删除记录

时间:2018-05-09 10:10:56

标签: java sql hibernate spring-boot cascading-deletes

我有一个表部门,其中有一对多映射到Employee表并且所有级联类型都是。

@OneToMany(mappedBy="department",orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @Fetch(FetchMode.JOIN)
    private List<Employee> emp; 

在数据库中,子表(Employee)对外键具有此约束 enter image description here

当我从Java代码中删除部门表中的记录时,使用带有主键的Hibernate *删除功能作为参数,*它是从部门表中删除记录以及删除员工表中的所有相关记录。 当Iam在查询下运行时(Dep_ref不是primaryKey)

delete from Department where Dep_ref= 99999;

因此应删除Department Table中的所有记录以及Employee表中的相关记录。 ,Iam低于错误。

  

SQL错误:ORA-02292:违反了完整性约束 - 子记录   发现   02292. 00000 - “违反完整性约束(%s。%s) - 发现子记录”   *原因:尝试删除具有外部的父键值              依赖。   *操作:先删除依赖项,然后删除父项或禁用约束。

任何人都可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

映射中的问题。这是错误的方向。您应该在Employee上创建外键以引用Department。

// Departments
@OneToMany(mappedBy="departments", cascade=CascadeType.ALL)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Set<Employee> emp;

// Employee
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="department_id" , referencedColumnName="id", insertable=false, updatable=false)
private Departments department;