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 조인으로 한번에 조회.