[JPA] 페치 조인

페치 조인 사용법

  • JOIN FETCH 구문으로 연관 엔티티를 즉시 로딩
  • JPQL은 연관 엔티티를 단순한 조인이 아니라
    • 즉시 로딩할 엔티티로 처리함
@Test
  void testFetchJoin() {
      String jpql = "select m from Member m join fetch m.teams";
      List<Member> resultList = em.createQuery(jpql, Member.class)
                                  .getResultList();
      System.out.println("resultList = " + resultList);
  }
  • 페치 조인으로 팀을 조회한 경우
    • 팀 엔티티는 프록시 객체가 아니라
    • 실제 엔티티임.
      • 지연로딩이 발생하지 않는 것임.

장점

  1. 성능의 최적화
    1. 페치 조인을 사용시 필요한 엔티티를 미리 로딩할 수 있음
    1. 나중에 엔티티 접근시 추가적인 쿼리를 줄일 수 있음
  1. N+1 문제의 해결
    1. 연관된 엔티티를 조회시에 미리 들고오기 때문에, 나중에 각 연관된 엔티티를 로딩하기 위해 발생하는 N+1 쿼리의 문제를 방지가능하다.

단점

  1. 페치 조인인 연관된 엔티티를 모두 메모리에 로드함.
    1. 연관 데이터가 많으면 메모리의 사용량이 급증
    1. 사용시 성능, 메모리 사용 상충관계를 고려해야함
  1. 엔티티 전체를 로딩하기에..
    1. 선택적인 로딩이 필요한 경우 DTO를 사용해 프로젝션 쿼리를 고려해야함
    1. 프로젝션 쿼리?
      1. 말이 있어 보이는거지
      1. 그냥 필요한 필드만 들고와서
      1. select 해주는 것임

Uploaded by N2T

'자바 > JPA' 카테고리의 다른 글

[JPA] 집합 함수  (0) 2023.11.09
[JPA] JPQL 조인  (0) 2023.11.09
[JPA] 컬렉션 페치 조인  (0) 2023.11.09
[JPA] 페치 조인과 일반 조인의 차이점  (0) 2023.11.09
[JPA] __**@AttributeOverride: 속성 재정의**__  (0) 2023.11.09