考虑一对多的关系。 orphanRemoval = true必要意味着删除级联。
@OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, orphanRemoval = true)
@JoinColumn(name = "parent_id", referencedColumnName = "id")
private Set<Child> child;
如果我在没有事先清除收藏的情况下删除有现有孩子的父母,会发生什么?
FK约束失败或儿童移除?
答案 0 :(得分:0)
根据规格。
指定为OneToOne或OneToMany支持的关联使用 orphanRemoval选项。
当orphanRemoval生效时,以下行为适用:
如果从关系中删除了作为关系目标的实体(通过将关系设置为null或删除 来自关系集合的实体),将删除操作 适用于孤儿的实体。应用删除操作 在冲洗操作时。 orphanRemoval功能是 适用于私人和拥有的实体#34;由他们的父母 实体。否则便携式应用程序必须不依赖于 特定的删除顺序,不得重新分配具有的实体 他们成了孤儿,或者试图坚持下去 它。如果孤立的实体是分离的,新的或已删除的 实体,orphanRemoval的语义不适用。
如果将删除操作应用于托管源实体,则删除操作将级联到关系目标中 按照第3.2.3节的规定,(因此不是 必须为关系指定cascade = REMOVE)[20]。
这意味着如果删除关系的父级,则级联REMOVE将应用于集合中作为关系目标的对象,因此答案为是,orphanRemoval暗示Cascade.REMOVE如果无关紧要,则设置为null集合与否。这意味着该关系的模型中不允许孤儿。