카테고리 없음

SpringData에서 save ()가 필요한 이유는 무엇입니까?

기록만이살길 2021. 2. 22. 17:12
반응형

SpringData에서 save ()가 필요한 이유는 무엇입니까?

1. 질문(문제점):

SpringData 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);
    }
  }
}

그리고에 대한 호출 save이 JPA 관점에서 엄격하게 필요한 것은 아니지만 SpringData가 제공하는 저장소 추상화에 일관성을 유지하기 위해 여전히 있어야한다는 메모가 있습니다 .

트랜잭션으로 인해 끝에있는 모든 것이 save()호출 없이도 데이터베이스에 유지된다는 것을 이해합니다 . 그러나 나는 그것이 여전히 존재해야하는 이유 와 SpringData가 제공하는 저장소 추상화에 일관성을 유지 한다는 것이 무엇을 의미하는지 이해하지 못한다 .

나는 .save()중복 호출로 봅니다.

2. 해결방안:

당신이 인용 한이 텍스트는 단지 좋은 습관이라고 말하고 싶습니다. 이것은 코드 가독성 / 유지 보수성을 향상시킵니다. 즉, @Transactional메소드 내에서 엔티티를 분리하면 이 엔티티가 지속되지 않는다는 것을 기억하십시오 . 그리고 엔티티의 지속성을 명시 적으로 언급하는 것은 개발자에게 거의 자명합니다 (또는 언급 된 분리의 경우 예외가 발생하며 이는 자명합니다).

나는 당신이 요구 한 일관성이 적어도 나에게는 정확히 그것을 의미한다고 말하고 싶습니다. 일관성이 있다는 것은 어쨌든 호출 될 메서드를 명시 적으로 구현하는 것을 의미합니다 ( "내부", 대부분 버그로 이어짐).

65871706
반응형