将一个实体移动到另一个拥有的 OneToMany 集合中
moving an entity into another owned OneToMany Collection
在我的应用程序中,有一个 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(死亡),那么我的模型就是矛盾的。
在我的应用程序中,有一个 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(死亡),那么我的模型就是矛盾的。