Hibernate / JPA:删除子项时从多个父项中删除

时间:2018-03-05 07:36:03

标签: java hibernate jpa one-to-many

我有一个特定的问题,我不知道Hibernate是否可以自动解决:

在我们的域模型中,我们有许多双向的一对多关系,其中"孩子"可能是许多父母的孩子。

示例:

public Class Role {

    @ManyToOne(targetEntity = Actor.class, fetch = FetchType.LAZY)
    private Actor actor;

    @ManyToOne(targetEntity = Contact.class, fetch = FetchType.LAZY)
    private Contact contact;
}

public class Actor {

    @OneToMany(targetEntity = Role.class, fetch = FetchType.LAZY)
    private List<Role> roles;
} 
public class Contact {

    @OneToMany(targetEntity = Role.class, fetch = FetchType.LAZY)
    private List<Role> roles;
} 

我遇到的问题是,当通过调用entityManager.remove(node)删除Role-node时,我同时想要从所有映射列表中删除Role -refrence,以便db字段适当地为空,同时保持父母并没有在各自的名单上删除删除

这可能,或者这是jpa / hibernate的默认行为吗?

2 个答案:

答案 0 :(得分:2)

您应该显式迭代联系人和actor对象的角色列表并删除相应的角色对象。这是唯一的选择。因为它不会在某个时候自动删除(大部分时间)。

答案 1 :(得分:1)

我敢说这会自动发生。 Actor和联系人列表构建在角色对象内的外键上 - 如果从db中删除了角色,那么当在另一个会话中加载角色/联系人时,它将从集合中消失。实际上,父对象不会在其中包含对Role的任何引用。