为什么在 Spring 数据中需要 save()?

Why save() is necessary in Spring Data?

在 Spring Data JPA 文档中,在 Transactionality 部分下有一个关于使用 facade 为多个存储库调用定义事务的示例:

@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 数据.

我明白,由于交易的缘故,即使没有 save() 调用,交易结束时的所有内容都会持久保存到数据库中。但我不明白为什么 它应该仍然存在 以及 与 Spring Data[=27] 提供的存储库抽象保持一致是什么意思=].

我认为 .save() 是多余的调用。

我想说你引用的这篇文章只是一个很好的做法 - 它增强了代码的可读性/可维护性,即请记住,如果你在 @Transactional 方法中分离一个实体,这个实体将不会被坚持。并且明确声明实体的持久性对于开发人员来说几乎是不言自明的(或者在提到的分离的情况下导致异常,这也是不言自明的)。

我会说你所问的这种一致性就是这个意思,至少对我来说是这样。保持一致意味着显式实现无论如何都会被调用的方法(“幕后”,这通常会导致错误)。