将一个实体移动到另一个拥有的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会被删除,而不会添加到幸存的人中。

我需要改变什么,以便通过生存角色关系添加和持久化它们?

我找到了解决方案:

dieing.getRoles().clear();

是错误的。我去掉了那条线,现在它起作用了。

虽然这是一个解决方案,但我对JPA/Hibernate在这里的工作方式并不满意。幸存的人是";偷窃;来自";死亡";没有";死亡";第一个释放它们的人。所以,如果我在刷新后不更新(死亡(,我就有了一个矛盾的模型。

相关内容

  • 没有找到相关文章

最新更新