有没有人解决此问题: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方法:
Parent
public void addChild(Child child) { children.add(child); child.setParent(this); } public void removeChild(Child child) { children.remove(child); child.setParent(null); }
有关更多详细信息,请查看本文。