微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将实体移动到另一个拥有的 OneToMany 集合中

如何解决将实体移动到另一个拥有的 OneToMany 集合中

在我的应用程序中,有一个 Person 实体,它具有多个 PersonRole 类型的角色。

@Entity
public class Person {

    @OnetoMany(mappedBy = "person",cascade=CascadeType.ALL,orphanRemoval=true,fetch=FetchType.LAZY)
     protected Set<PersonRole> roles;

    ...
}

@Entity
public abstract class PersonRole {

    @ManyToOne
    protected Person person;

    ...
}

有时数据库中会有重复的人,我正在尝试实现一个功能将这两个人合并为一个。 由于 PersonRole 还附加了一些权限,我不想删除和重新创建它,我想将它从死亡的人移动到幸存的人:

for (PersonRole role : dieing.getRoles()) {
    role.mergeInto(surviving);
}
dieing.getRoles().clear();

PersonRole 中的方法如下所示:

public void mergeInto(Person surviving ) {
    this.person = surviving;
    surviving.getRoles().add(this);
}

不幸的是它不起作用。当我运行它时,PersonRoles 被删除,而不是添加到幸存的人。

我需要更改哪些内容,以便通过 surviving.roles 关系添加和保留它们?

解决方法

我找到了解决方案:

dieing.getRoles().clear();

错了。我删除了那条线,现在它可以工作了。

虽然这是一个解决方案,但我对 JPA/Hibernate 在这里的工作方式并不满意。幸存的人正在“偷走”“死亡”人的实体,而“死亡”人没有先释放它们。所以如果我在刷新后不 em.update(dieing) ,我就有了一个矛盾的模型。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。