我有两个实体用户和部门,两个实体(OneToMany 和 ManyToOne)之间存在双向关系,我在一个服务类中管理关系,该服务类在以下处理删除和添加用户到部门:
List<User> originalUserList = userJpaRepository.findAllByDepartment(department);
for (Iterator<User> iterator = originalUserList.iterator(); iterator.hasNext();) {
User user = iterator.next();
if (!department.getDepartmentEmployees().contains(user)) {
user.setDepartment(null);
userJpaRepository.save(user);
}
}
for (User user : department.getDepartmentEmployees()) {
user.setDepartment(department);
userJpaRepository.save(user);
}
Department savedDepartmetn = jpaRepository.save(department);
return savedDepartmetn;
一切正常,添加和删除用户会反映到数据库中,但唯一的问题是倒数第二行,instance savedDepartment 仍将包含已删除的用户,因为hibernate 从对用户进行更改之前发生的选择填充其数据是实际上刷新到数据库。这里最好的方法是什么,
- 我是否应该在保存部门之前刷新(如果保存部门失败,事务会回滚)
- 我应该在将 savedInstance 返回给调用者之前刷新它吗
- 任何其他想法。