JPA Entity FetchType

태그: , , , ,

카테고리:

출처 : 인프런 김영한님의 강의 “자바 ORM 표준 JPA 프로그래밍 - 기본편” 중 일부


🚫 아래 내용은 주관적인 생각이므로 사실과 다를 수 있습니다.


개요

JPA Entity 매핑에서 즉시로딩과 지연로딩에 대한 내용

정의

  • 즉시로딩
    • FetchType.EAGER
    • 엔티티 조회시, 엔티티와 연관관계에 있는 다른 엔티티들을 함께 조회
  • 지연로딩
    • FetchType.LAZY
    • 엔티티 조회시, 해당 엔티티만 조회하고
      엔티티와 연관관계에 있는 다른 엔티티들을 프록시 객체로 생성해
      해당 프록시 객체가 사용되는 시점에 추가로 조회

사용예시

@Entity
public class Team {

    // 즉시로딩(EAGER)의 경우, 조회하는 Team의 수 N 만큼  
    // 각 embers를 추가로 조회하는 SQL 쿼리가 발생
    // Team들의 각 members 조회 N번 + Team 조회 1번 = N + 1
    @OneToMany(fetch = FetchType.EAGER)
    private List<Member> members;
    ...
}

주의사항

  • 즉시로딩은 실무에서 사용하기에 부적합
  • 즉시로딩을 사용하면 예상하지 못한 SQL이 발생
  • 즉시로딩은 JPQL에서 N + 1 문제를 일으킨다
  • @…ToOne 애노테이션은 즉시로딩이 기본값
    • @…ToOne(fetch = FetchType.LAZY)로 변경해야함
  • @…ToMany 애노테이션은 지연로딩이 기본값

댓글남기기