작성
·
164
0
@Service
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
@Transactional
public void signUp(Member member){
memberRepository.save(member);
}
public Member findOne(Long id){
return memberRepository.findById(id).orElseThrow();
}
}
@Test
void signUp() {
Member member1 = Member.builder()
.userId("user1")
.birthDay(LocalDate.now())
.password("pass")
.email("aa@bb.cc")
.build();
memberService.signUp(member1);
Member member2 = memberService.findOne(member1.getId());
assertThat(member1).isEqualTo(member2);
}
트랙잰션이 Memberservice에서 signUp을 완료 하고 트랜잭션이 끝난다고 영속성 컨텍스트가 비워지지 않다고 이해 했는데 왜 같은 id 값으로 다시 찾을 때 동일성을 보장하지 않는걸까요?
답변 1
1
안녕하세요. 김민종님, 공식 서포터즈 코즈위버입니다.
테스트 클래스에 트랜잭션을 사용하지 않을 경우 signUp 메소드를 수행하며 새로운 트랜잭션을 시작하고, 영속성 컨텍스트를 생성합니다. 그리고 이렇게 생성한 영속성 컨텍스트는 signUp() 메소드가 끝나는 순간 모두 소멸합니다. 그래서 member1과 member2 가 같음을 보장하지 않습니다.
감사합니다.
감사합니다. 덕분에 궁금증 해결했습니다.