SpringJPA无法删除实体,因为表中有fk

ljsrvy3e  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(339)
@Entity
@Getter
@Setter
@Table(name = "children")
public class Child extends BaseEntity {

    @Column(name = "firstName")
    private String firstName;

    @Column(name = "lastName")
    private String lastName;

    @OneToOne
    @JoinColumn(name = "group_id", referencedColumnName = "id")
    private Group group;

    @Column(name = "medical_info")
    private String medicalInfo;

    @Column(name = "birth_date")
    @Temporal(TemporalType.DATE)
    private Date birthDate;

    @Column(name = "starting_date")
    @Temporal(TemporalType.DATE)
    private Date startingDate;

    @Column(name = "native_language")
    private String nativeLanguage;

    @Column(name = "second_language")
    private String secondLanguage;

    private String picture;
}

我试图删除一个组,但这失败了,因为有些孩子有fk到该组。该组没有任何fk到子级。我可以找到所有的孩子与fk到该组,并设置该组为空,然后保存,但这看起来黑客和肯定有一个更好的选择。我怎样才能很好地移除fk?

qcuzuvrc

qcuzuvrc1#

如果要在父级设置空值,可以在字段中使用级联注解。您可以在规范中找到更多详细信息:https://docs.oracle.com/cd/e19798-01/821-1841/bnbqm/index.html
另一种情况是,如果要删除相关实体,也可以尝试删除相关字段上带有注解的属性。引用jpa 2.0规范中的相关部分:
指定为onetoone或onetomany的关联支持使用孤立删除选项。当删除生效时,将应用以下行为:
如果作为关系目标的实体从关系中移除(通过将关系设置为null或从关系集合中移除实体),则移除操作将应用于孤立的实体。清除操作在冲洗操作时应用。孤儿删除功能适用于由其父实体私有的实体。可移植应用程序不能依赖于特定的删除顺序,也不能将孤立的实体重新分配给另一个关系或试图持久化它。如果孤立实体是分离的、新的或删除的实体,则孤立删除的语义不适用。
如果删除操作应用于托管源实体,则删除操作将按照第3.2.3节的规则级联到关系目标(因此不必为关系指定cascade=remove)
孤立删除规范:https://docs.oracle.com/cd/e19798-01/821-1841/giqxy/

相关问题