JPA Lazy Loading

JPA 엔티티에서 지연 로딩을 설정하여 연관된 객체를 필요할 때만 호출하는 방법을 설명합니다.

 

JPA Entity 에서 참조하는 객체를 사용할 때, 요청이 들어올 때에만 호출하는 Lazy Loading 을 설정할 수 있다.

import javax.persistence.*;

@Entity
@Table(name = "Member")
public class Member {

    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;

    @Column(name = "USERNAME")
    private String userName;

    // Lazy-Load, Team 을 사용하는 요청이 생기면 그 때 로드한다.
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "TEAM_ID")
    private Team team;

}

 

* FetchType.EAGER 을 사용하면, 즉시 로드이기 때문에 Member 호출 시에 모두 다 불러오게 된다.


* 프록시와 죽시로딩 주의

-실무에서는 Lazy Loading 만 사용해야 한다. 

-즉시 로딩은 JPQL 에서 N+1 문제를 일으킨다. (주의,,)

-@ManyToOne, @OneToOne 을 기본이 즉시 로딩 (Lazy 로 설정해야 한다.)

-@OneToMany, @ManyToMany 는 기본이 지연 로딩이다.


이것도 읽어보세요