8.2 즉시 로딩과 지연 로딩

즉시 로딩

JPA는 즉시 로딩을 최적화하기 위해 가능하면 조인 쿼리를 사용한다.

@Entity
public class Member {

    //...
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "TEAM_ID")
    private Team team;
}

지연 로딩

@Entity
public class Member {
    //...
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "TEAM_ID")
    private Team team;
    //...
}

지연로딩 실행 코드

Member member = em.find(Member.class, "member1");
Team team = member.getTeam();   //프록시 객체
team.getName();                 //실제 사용 순간

지연 로딩 SQL

// em.find(Member.class, "member1");
SELECT * FROM MEMBER
WHERE MEMBER_ID = 'member1'

// team.getName() 호출
SELECT * FROM TEAM
WHERE TEAM_ID = 'team1'

정리

지연 로딩(LAZY)

  • 연관된 엔티티를 프록시로 조회.
  • 프록시를 실제 사용할 때 초기화하면서 데이타베이스를 조회.

즉시 로딩(EAGER)

  • 연관된 엔티티를 즉시 조회.
  • 하이버네이트는 가능하면 SQL 조인으로 한번에 조회.

results matching ""

    No results matching ""