我有以下实体:
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可以解决这个问题,但事实并非如此。为什么会这样?
(无法更改基础数据库结构)。
答案 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)
问题在于,子实体具有更多需要双向关系的依赖项。