[TIL] JPA - FetchType.EAGER와 LAZY에 대한 오해

phdljr·2024년 1월 16일
0

TIL

목록 보기
57/70

EntityGraphFetchType.EAGER에 대해 발생되는 쿼리를 비교하던 도중, 이상한 현상이 일어났다.
서로 같은 개수의 SELECT 쿼리를 발생시킬 줄 알았지만, 상황마다 달랐다.

그래서 다시 알아본 결과, 필자는 LAZYEAGER에 대해 잘못 이해하고 있었다.

그것에 대해 다시 알아보는 시간을 가져보겠다.


FetchType.LAZY

  • 엔티티를 조회할 시, 연관 관계가 적용된 엔티티는 프록시로 가져오는 옵션
  • 실제로 엔티티가 사용됐을 때, 조회 쿼리를 실행시킨다.

FetchType.EAGER

  • 엔티티를 조회할 시, 연관 관계가 적용된 엔티티도 동시에 들고오는 옵션
  • 단, 2개 이상의 연관 엔티티가 존재할 시, 예외가 발생한다.
  • EAGER는 되도록 join을 사용해서 한번에 가져오려고 노력한다.

EAGER를 사용하면 무조건 join을 통해 단 하나의 쿼리만 발생시키는가?

  • 꼭 그렇지는 않다.
  • 부모 엔티티를 조회한 뒤, 즉시 자식 엔티티를 조회하는 방식으로 작동될 수도 있다.
  • 즉, 조회 쿼리가 두 번 나갈 수도 있다.

참조

https://mighty96.github.io/til/fetch_fetchjoin/

profile
난 Java도 좋고, 다른 것들도 좋아

0개의 댓글