질문
강의를 수강하고난 후에 @Transactional 에 대해서 알아보는데 저 어노테이션을 쓰면 트랜잭션이 실행되고 더티체킹을 수행한다고 했습니다. 그래서 save 를 하지 않아도 된다! 라는 내용을 알게되었는데 이게 update 한정인지, create 에도 적용이 되는건지 궁금합니다.
만약 create 에도 적용되는 내용이라면 저희 프로젝트 코드 이런부분에서 save 를 빼도 되나요?
@Transactional
public void register(RegisterRequest request) throws ApiException {
// 이메일로 멤버 조회
Optional<Member> member = memberRepository.findByEmail(request.getEmail());
if (member.isPresent()) {
throw new ApiException(ErrorType.ALREADY_EXIST_EMAIL);
}
if (request.getEmail() == null || request.getPassword() == null || request.getUserNickname() == null) {
throw new ApiException(ErrorType.NULL_VALUE_EXIST);
}
// 멤버 생성 및 저장
Member user = Member.builder()
.userNickname(request.getUserNickname())
.email(request.getEmail())
.password(passwordEncoder.encode(request.getPassword()))
.role(Role.MEMBER)
.provider("local")
.build();
memberRepository.save(user); // 변경된 user 저장
Java
복사
답변
@김시은 create 시에는 스냅샷을 안찍는군요..?
@신세인[졸업생 / 이탈리아어과] 일단 저의 생각이긴 한데 더티체킹을 수행하는게 기존 앤티티와 스냅샷을 비교해서 값이 바뀌었을 경우 update 쿼리를 자동으로 생성해서 날려주는걸로 알고 있습니당! 그래서 아마 create 시에는 save 를 해주는 것이 맞지 않을까 생각됩니다