작성
·
284
·
수정됨
0
@Test
public void findMemberLazy(){
//given
//member1 -> teamA
//member2 -> teamB
Team teamA = new Team("teamA");
Team teamB = new Team("teamB");
teamRepository.save(teamA);
teamRepository.save(teamB);
memberRepository.save(new Member("member1", 10, teamA));
memberRepository.save(new Member("member2", 20, teamB));
//when
Optional<Member> byId = memberRepository.findById(1L);
}
위와 같은 코드가 있을때 memberRepository.findById(1L);
를 하면 저는 em.find를 통해서 영속성컨테스트를 조회하기 때문에 select쿼리가 안나간다고 생각이 들었습니다.
하지만 출력결과
select
m1_0.member_id,
m1_0.age,
m1_0.team_id,
m1_0.username
from
member m1_0
where
m1_0.member_id=?
select 쿼리가 나가는 것을 확인했습니다.
제 예전 질문에서는 JpaRepository에서의 Method Naming Query의 경우 JPQL로 조회를 하기 때문에 실행전 em.flush()가 일어나서 Direct로 DB에 쿼리가 날아가고 findById는 JpaRepository Interface의 target인 SimpleJpaRepository에 있기 때문에 em.find를 한다고 보았는데
왜 select 쿼리가 나갔는지 궁금합니다.
해결했습니다 감사합니다.