JPA中的外键约束问题,尽管存在“级联全部”

时间:2017-05-01 15:59:03

标签: java hibernate jpa one-to-many cascading-deletes

我正在尝试删除“LearnItem”类型的实体

@Entity
public class LearnItem implements Comparable<LearnItem>, Serializable {

private static final long serialVersionUID = 7526471111622776111L;

@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;

@OneToMany(mappedBy="learnItem", cascade = { CascadeType.ALL })
protected List<StudentItemRecord> studentItemRecords;

@OneToMany(mappedBy="learnItem", cascade = { CascadeType.ALL })
protected List<Result> results;
}

但是,我得到“无法删除或更新父行:外键约束失败(wcdtg7jkp873w8obstudent_item_record,CONSTRAINT FK_ockk47ux0gb08lnuisradomer FOREIGN KEY({{1参考learn_item_idlearn_item))“错误。 在StudentItemRecord中,我有一个LearnItem的参考:

id

我不知道为什么会出现这个错误,CascadeType.ALL设置是不是应该删除列表中的所有StudentItemRecords,避免出现外键约束问题?

1 个答案:

答案 0 :(得分:0)

查看您的数据库架构。 JPA配置不会覆盖您的数据库架构,因此如果您在JPA中限制删除,则默认情况下不会删除所有依赖项。

或者例如,您可能有这样的依赖:

A -> B -> C

A -> B = Cascade
B -> C = Cascade

在这种情况下,如果删除A,将删除B和C. 如果是在DB中,则有

A -> B = Cascade
B -> C = Restrict

不会删除任何内容,因为B和C之间的FK会阻止它。