orphanRemoval = true意味着级联删除

时间:2014-03-14 13:48:44

标签: jpa orm jpa-2.0

考虑一对多的关系。 orphanRemoval = true必要意味着删除级联。

@OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH},  orphanRemoval = true)
@JoinColumn(name = "parent_id", referencedColumnName = "id")
private Set<Child> child;

如果我在没有事先清除收藏的情况下删除有现有孩子的父母,会发生什么?

FK约束失败或儿童移除?

1 个答案:

答案 0 :(得分:0)

根据规格。

  

指定为OneToOne或OneToMany支持的关联使用   orphanRemoval选项。

     

当orphanRemoval生效时,以下行为适用:

     
      
  • 如果从关系中删除了作为关系目标的实体(通过将关系设置为null或删除   来自关系集合的实体),将删除操作   适用于孤儿的实体。应用删除操作   在冲洗操作时。 orphanRemoval功能是   适用于私人和拥有的实体#34;由他们的父母   实体。否则便携式应用程序必须不依赖于   特定的删除顺序,不得重新分配具有的实体   他们成了孤儿,或者试图坚持下去   它。如果孤立的实体是分离的,新的或已删除的   实体,orphanRemoval的语义不适用。

  •   
  • 如果将删除操作应用于托管源实体,则删除操作将级联到关系目标中   按照第3.2.3节的规定,(因此不是   必须为关系指定cascade = REMOVE)[20]。

  •   

这意味着如果删除关系的父级,则级联REMOVE将应用于集合中作为关系目标的对象,因此答案为是,orphanRemoval暗示Cascade.REMOVE如果无关紧要,则设置为null集合与否。这意味着该关系的模型中不允许孤儿。