Skip to content

@Transactional vs save() 둘 중 어느 것을 사용해야 할까? #2

@Yiseull

Description

@Yiseull

단건 업데이트를 할 경우 @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)
}

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions