-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
단건 업데이트를 할 경우 @transactional과 save() 둘 중 어느 것을 사용해야 할까?
업데이트를 해야할 사항이 하나인 경우에 대해서
public void modifyNickname(final Long memberId, final String nickname) {
final Member member = memberRepository.findById(memberId)
.orElseThrow(() -> new EntityNotFound(ErrorCode.MEMBER_NOT_FOUND));
member.changeNickname(nickname);
}
1. @transactional 사용
JPA의 변경 감지를 활용한다. 메서드가 끝난 후에 update 쿼리를 날리기 위해서 메서드에@Transactional
을 붙여준다.
@Transactional
public void modifyNickname(final Long memberId, final String nickname) {
final Member member = memberRepository.findById(memberId)
.orElseThrow(() -> new EntityNotFound(ErrorCode.MEMBER_NOT_FOUND));
member.changeNickname(nickname);
}
2. save() 사용
위의 메서드는 여러 update가 수행되지도 않고 하나의 update만 일어나기 때문에 트랜잭션의 범위를 최소화하기 위해서 save()
메서드를 호출한다. save()
메서드 내부에는 @Transactional
이 붙어있다.
public void modifyNickname(final Long memberId, final String nickname) {
final Member member = memberRepository.findById(memberId)
.orElseThrow(() -> new EntityNotFound(ErrorCode.MEMBER_NOT_FOUND));
member.changeNickname(nickname);
memberRepository.save(member)
}