JPA孤立删除不适用于OneToOne关系

有没有人解决此问题:https :

//hibernate.atlassian.net/browse/HHH-9663?

我也面临着类似的问题。当我在两个实体之间创建单面(无反向引用)一对一关系并将孤立删除属性设置为true时,将引用设置为null后,引用的对象仍在数据库中。

这是示例域模型:

@Entity

public class Parent {

...

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)

@JoinColumn(name = "child_id")

private Child child;

...

}

@Entity

public class Child {

...

@Lob

private byte[] data;

...

}

我目前正在通过手动删除孤儿来解决此问题。

回答:

级联仅对从 父级 传播到 子级的 实体状态转换有意义。在您的情况下,“父母”实际上是该协会(具有FK)的孩子。

尝试使用此映射:

@Entity

public class Parent {

...

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "parent")

private Child child;

...

}

@Entity

public class Child {

@OneToOne

@JoinColumn(name = "parent_id")

private Parent parent;

...

@Lob

private byte[] data;

...

}

并且要级联删除孤儿,您现在需要:

Parent parent = ...;

parent.getChild().setParent(null);

parent.setChild(null);

甚至更好的是,在Parent实体类中使用addChild / removeChild方法:

public void addChild(Child child) {

children.add(child);

child.setParent(this);

}

public void removeChild(Child child) {

children.remove(child);

child.setParent(null);

}

有关更多详细信息,请查看本文。

以上是 JPA孤立删除不适用于OneToOne关系 的全部内容, 来源链接: utcz.com/qa/409475.html

回到顶部