【发布时间】:2021-01-24 14:23:19
【问题描述】:
在 Spring Data JPA 文档中,Transactionality 部分下有一个关于使用外观来定义多个存储库调用的事务的示例:
@Service
class UserManagementImpl implements UserManagement {
private final UserRepository userRepository;
private final RoleRepository roleRepository;
@Autowired
public UserManagementImpl(UserRepository userRepository, RoleRepository roleRepository) {
this.userRepository = userRepository;
this.roleRepository = roleRepository;
}
@Transactional
public void addRoleToAllUsers(String roleName) {
Role role = roleRepository.findByName(roleName);
for (User user : userRepository.findAll()) {
user.addRole(role);
userRepository.save(user);
}
}
}
还有一点需要注意的是,从 JPA 的角度来看,对 save 的调用并不是绝对必要的,但为了与 Spring Data 提供的存储库抽象保持一致,应该仍然存在.
我了解由于事务的原因,即使没有save() 调用,它最后的所有内容都将保存到数据库中。但我不明白为什么它应该仍然存在以及与 Spring Data 提供的存储库抽象保持一致意味着什么。
我认为.save() 是一个多余的调用。
【问题讨论】:
-
这里的冗余是什么意思?
-
@k-wasilewski 即使没有
save()调用,用户也会被持久化到数据库中。
标签: spring hibernate jpa spring-data-jpa spring-data