인프런 커뮤니티 질문&답변

유근일님의 프로필 이미지
유근일

작성한 질문수

실전! 스프링 데이터 JPA

@EntityGraph

즉시로딩 처리 시 findAll()일 경우 동작이 안되는 이유가 궁금합니다.

작성

·

232

0

강의 중에는 실무에선 즉시로딩을 사용하지 말라고 하셨지만

테스트 차원에서 즉시로딩으로 findAll()을 조회하면 내부에서 left outer join이 걸리는 않는 현상을 확인했습니다.

동일한 조건에서 findById()로 처리하면 left outer join이 걸립니다.

OneToMany, ManyToOne 모두 동일하게 동작을 하던데 혹시 이렇게 동작되는 이유가 있을까요???

미리 답변 감사드립니다.

답변 1

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 근일님

findById()는 em.find() 메서드가 호출됩니다. 이 경우에는 즉시로딩으로 설정되어 있느면 left outer join이라는 최적화가 진행됩니다.

반면에 findAll()은 JPQL 쿼리가 나갑니다. JPQL 쿼리가 실행되면, JPA는 JPQL 쿼리에 최적화를 실행하지 않습니다.

이런 부분들 때문에 지연로딩을 사용하시길 권장합니다.

감사합니다.

유근일님의 프로필 이미지
유근일

작성한 질문수

질문하기