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

时间:2012-05-16 14:04:03

标签: hibernate jpa many-to-one

以下内容:

//User class...

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

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

1 个答案:

答案 0 :(得分:4)

你是对的,很少(如果有的话)需要而且不是可移植的构造来使用带有ManyToMany或ManyToOne的CascadeType.REMOVE。这在JPA 2.0规范中记录如下:

  

关系建模注释约束了使用   cascade = REMOVE规范。级联= REMOVE规范应该   仅适用于指定为OneToOne或的协会   一对多。将cascade = REMOVE应用于其他应用程序的应用程序   协会不可携带。

它存在的原因可能只是没有合理的方法将级联的允许值限制为CascadeType枚举值的某个子集。