Search
🤦🏻‍♀️

@Transactional 과 save

태그
질문자
김시은
김시은

질문

강의를 수강하고난 후에 @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 를 해주는 것이 맞지 않을까 생각됩니다