Spring JPA [활용] (컬렉션 조회) 페치 조인

신재원·2023년 2월 13일
0

Spring JPA 활용

목록 보기
14/18

X To Many 컬렉션 조회시 페치 조인 사용

  • 예시
    ( X To Many 관계인 경우 Many 부분에도 fetch 조인을 해줘서, Many엔티티의 데이터를 조인해줘야된다)
  • 📍 X To Many를 패치 조인을 하면 페이징 처리가 안된다.
    (페이징 처리 사용 X)
  • 컬렉션 패치 조인은 1개만 사용할수있다. X To Many -> Many는 사용 X
  • 문제점 : 데이터쿼리가 Many 데이터 만큼 쿼리가 증가한다 (뻥튀기)
    • 해결 : select 쿼리문에 distinct 사용
      • ✔ distinct : DB에 distinct 키워드를 날려주고, 루트 (from)에 중복인 경우에 중복을 걸러서 컬렉션에 담아준다.

패치조인의 페이징 처리와 한계 돌파

  • 📌 X To One 관계는 모두 패치조인을 한다, To One 관계는 row의 수를 증가시키지 않음으로 페이징 처리에 영향을 주지않는다.
  • X To Many 예시 (컬렉션을 조회시 페이징 처리)
    ( 패치조인이 된 To One 관계를 먼저 해주면서 페이징 처리를한다)
  • 그런다음
    hibernate.default_batch_fetch_size
    (yml, properties) 하이버 네이트의 batch_fetch_size를 최적화 설정해줘야된다.
    • 쿼리 호출 수가 1 + N 에서 1 + 1로 최적화가 된다.
    • 컬렉션 패치 조인은 페이징이 불가능 하지만, 이 방법은 페이징처리가 가능하다.
  • 결론

    To One 관계는 패치 조인해도 페이징에 영향을 주지 않는다, 따라서 To One 관계는 패치 조인으로 쿼리 수를 줄이고 해결하고, 나머지는 hibernate.default_batch_fetch_size 로 최적화 하자

0개의 댓글