我有一个特定的问题,我不知道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的默认行为吗?
答案 0 :(得分:2)
您应该显式迭代联系人和actor对象的角色列表并删除相应的角色对象。这是唯一的选择。因为它不会在某个时候自动删除(大部分时间)。
答案 1 :(得分:1)
我敢说这会自动发生。 Actor和联系人列表构建在角色对象内的外键上 - 如果从db中删除了角色,那么当在另一个会话中加载角色/联系人时,它将从集合中消失。实际上,父对象不会在其中包含对Role的任何引用。