해결된 질문
작성
·
348
0
@Test
public void 회원가입(){
Member member = new Member();
member.setName("memberA");
Long savedMemberId = memberService.join(member);
Member findMember = memberService.findOne(savedMemberId);
assertThat(member).isEqualTo(findMember);
}
근데
제가 em.find() 동작이
먼저 영속성 컨텍스트에서 찾아보고 있으면 그걸 return.
없으면 DB에 쿼리 날려서 가져온 다음에 return.(쓰기지연은 잠깐 생각 안하고)
로 알고 있는데,
그렇다면 코드상
멤버 생성하고,
join해서 쿼리가 쌓이고,
그 다음 findOne해서 가져오는데, 저게 결국은 em.find() 잖아요. 그러면 이미 영속성 컨텍스트에 id가 같은 게 있기 때문에 그걸 반환하잖아요.
그래야 할 것 같은데
select
m1_0.member_id,
m1_0.city,
m1_0.street,
m1_0.zipcode,
m1_0.name
from
member m1_0
where
m1_0.name=?
이렇게 로그로 나가요.
그래서 아, isEqualTo니까 혹시 막 이름같은 거 참조해서 가져오는 건가? 했는데
isSameAs 해봐도 똑같아요.
왜 하필 name으로 조회하는지도 모르겠어요.
em.find()쪽이 실행된 것은 분명해요.