카테고리 없음

[JPA]fetch join

노트코드 2022. 1. 21. 01:58

fetch 조인

Property: 완료
생성일: 2021년 8월 11일 오전 11:16
주제: JPA
최종 업데이트: 2022년 1월 18일 오후 6:29

  • 회원을 조회하면서 연관된 팀도 함께 조회한다. (SQL 한번에)
  • 엔티티에 직접 적용하는 글로벌 로딩 전략보다 우선(@oneToMany(fetch = fetchType.Lazy)
  • 최적화가 필요한 곳은 fetch조인으로 해결

ex) [JPQL]

select m from Member m join fetch m.team

[sql]

SELECT M., T. From MEMBER M INNER JOIN TEAM T ON M.TEAM_ID = T.ID

만약 fetch조인을 하지 않는다면?

  • 회원1조회할때 팀A에 대한 쿼리한번
  • 회원2조회할때는 영속성 캐쉬에서 호출
  • 회원3 조회할대는 팀 B에 대한 쿼리가 발생한다.

즉 3개의 데이터를 조회하기위해 3번의 쿼리가 발생하는것→ 성능에 별로 좋지 않다.

그래서 한번에 조회할 수 있는 fetch조인을 사용한다.

컬렉션 fetch조인

  • 일대다 관계, 컬렉션 fetch조인

fetch조인의 한계

fetch조인에서는 페이징처리를 할 수 없다.

사용시 모든 데이터를 조회해서 메모리에 올려놓고 페이징한다 → 서버 오류의 위험

@BatchSize(100)

처음에 쿼리 100개를 먼저 하고, 나머지 또 100개 호출하는 방식
in절 사용