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

问题描述 投票:1回答:2

我有一个特定的问题,我不知道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字段适当地为空,同时保留父节点而不调用remove各自的名单

这是可能的,还是这是jpa / hibernate的默认行为?

java hibernate jpa one-to-many
2个回答
2
投票

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.