1

我有两个实体用户和部门,两个实体(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 返回给调用者之前刷新它吗
  • 任何其他想法。
4

1 回答 1

2

由于您使用的是附加实体,因此无需保存任何内容。JPA 会自动持久化您对附加实体所做的更改。

当你有一个双向关联时,你有责任在双方进行更改以确保你的对象模型是一致的。如果您设置user.department为 null,那么您还应该从department.users.

我不明白上面的代码在做什么,但删除调用保存,并维护关联的双方,一切都会好起来的。

于 2012-05-28T11:45:32.977 回答