Fetch Join / @EntityGraph

Shaun·2021년 8월 26일
1

JPA

목록 보기
11/31

Fetch Join/@EntityGraph

  • Member ->Team 지연관계

  • Member만 불러올때 team에 null을 넣을수 없으니 가짜객체 프록시를 넣어준다

-> team 의 내용을 건드리는 순간 team의 진짜 데이터를 가져온다(프록시 초기화)(team 을 불러오는 쿼리 하나 또나감)

  • member 쿼리하나 보냈는데(1) lazy로딩 떄문에 team 까지 불러온다(N)
    =N+1 문제 발생
    =member 불러오는 쿼리+ 팀불러오는 쿼리

  • N이 커지면 성능 저하 문제 발생! ->Fetch Join 사용!

Fetch Join

  • 연관된 엔티티들을 SQL한번에 조회 하는 방법

  • 팀객체를 부를떄 프록시 가짜객체가 나오지 않는다.

@EntityGraph

  • 사실상 Fetch Join 의 간편 버전

  • left outer join 사용

  • JPQL + EntityGraph 도 가능 하다

총정리

jpql 은 실행시 sql 로 해석 되서 나간다.

ex - >(jpql+eager) select * from member -> 맴버 가져오고 어? eager 있네 하고 team가져와서 n+1문제 발생

(jpql + lazy) = 프록시 객체가 나와 n+1문제 발생 x

(jpql+ lazy) = 팀 쓰는순간 또 n+1문제 발생 -> fetch join 으로 해결

profile
호주쉐프에서 개발자까지..

0개의 댓글