我有两个实体User和Department,两个实体(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;
一切正常添加和删除用户反映到数据库,但唯一的问题是在倒数第二行,isntance savedDepartment仍将包含已删除的用户,因为hibernate从更改完成之前的选择中填充其数据用户实际上是刷新到数据库。这里最好的方法是什么,
答案 0 :(得分:2)
由于您使用的是附加实体,因此无需保存任何内容。 JPA会自动保留您对附加实体所做的更改。
当您进行双向关联时,您有责任在两侧进行更改,以确保您的对象模型一致。如果您将user.department
设置为null,那么您还应该从department.users
中删除用户。
我不明白上面的代码是做什么的,但删除了保存的调用,并维护了关联的两面,一切都会好的。