gpt4 book ai didi

java - JPA 孤儿删除不适用于 OneToOne 关系

转载 作者:搜寻专家 更新时间:2023-10-30 19:43:22 26 4
gpt4 key购买 nike

有没有人有解决此问题的方法: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 实体类中配置 setChild 方法来设置两个关联:

public void setChild(Child child) {
if (child == null) {
if (this.child != null) {
this.child.setParent(null);
}
}
else {
child.setParent(this);
}
this.child = child;
}

关于java - JPA 孤儿删除不适用于 OneToOne 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31470414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com