UserとDepartmentの2つのエンティティがあります。2つのエンティティ(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;
ユーザーの追加と削除はすべて正常に機能し、データベースに反映されますが、唯一の問題は最後から2行目にあり、ユーザーに加えられた変更の前に行われる選択からhibernateがデータを入力するため、isntancesavedDepartmentには削除されたユーザーが含まれます。実際にデータベースにフラッシュされます。ここでの最善のアプローチは何ですか、
- 部門を保存する前にフラッシュする必要があります(部門の保存が失敗した場合、トランザクションはロールバックされます)
- 呼び出し元に返す前にsavedInstanceを更新する必要があります
- その他のアイデア。