一尘不染

JPA / Hibernate Cascade。删除@ManyToOne的用例

hibernate

具有以下内容:

//User class...

@ManyToOne(cascade=CascadeType.REMOVE)
@JoinColumn(name="INSTITUTION_ID")
public void setInstitution(final Institution institution) {
    this.institution = institution;
}

这是否意味着删除User对象会删除与其关联的Institution对象?如果是这种情况,我将不遵循为什么需要这样做。例如说该机构有很多用户。这是否意味着删除这些用户之一会删除该机构,在这种情况下,所有其他用户也会丢失该机构?


阅读 222

收藏
2020-06-20

共1个答案

一尘不染

没错,很少(如果曾经)需要将CascadeType.REMOVE与ManyToMany或ManyToOne一起使用。在JPA 2.0规范中记录如下:

关系建模注释限制了cascade = REMOVE规范的使用。级联=删除规范仅应应用于指定为OneToOne或OneToMany的关联。将Cascade
= REMOVE应用于其他关联的应用程序不可移植。

之所以存在,可能是因为没有合理的方法将级联的允许值限制为CascadeType枚举值的某些子集。

2020-06-20