当拥有一对多时,orphanRemoval无法正常工作?

时间:2018-07-12 10:11:30

标签: hibernate jpa

我有以下实体:

public class Parent {

    @Id
    @Column(name = "parentID")
    private Long parentID; 

    @OneToMany(mappedBy = "parent")
    private Set<Child> childs;
}

public class Child {

    @Id
    private long id;

    @ManyToOne
    @JoinColumn(name = "parentID", referencedColumnName = "parentID")
    private Parent parent;
}

我试图删除父母,但如果我正确理解的话,我会收到关于FK的错误消息,这是因为孩子是所有者

然后我将其更改为以下内容,以使Parent为所有者:

@OneToMany(orphanRemoval = true)
@JoinColumn(name = "parentID")
private Set<Child> childs;

当我删除父休眠时,会进行更新:

update child set parentID=null where parentID=?

但是Child仍然存在于数据库中,其parentID为null。我以为orphanRemoval可以解决这个问题,但事实并非如此。为什么会这样?

(无法更改基础数据库结构)。

2 个答案:

答案 0 :(得分:0)

尝试一下:

public class Parent {
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "parent")
    private Set<Child> childs;
}

public class Child {    
    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
    @JoinColumn(name = "parentID", referencedColumnName = "parentID")
    private Parent parent;
}

答案 1 :(得分:0)

问题在于,子实体具有更多需要双向关系的依赖项。