JPA/JPA
즉시 로딩과 지연 로딩
lovineff
2020. 6. 9. 10:26
지연 로딩
@ManyToOne(fetch = FetchType.LAZY)
해당 객체는 프록시 객체로 생성되며, get 할때 쿼리를 수행하여 가져옴.
@BatchSize(int) 로 쿼리를 하나만 수행하게 할 수 있다.
즉시 로딩
@ManyToOne(fetch = FetchType.EAGER)
연관된 엔티티 객체 조회시 하나의 쿼리로 조회하며, 엔티티 객체가 된다.
JPQL에서 (1 + N) 문제를 일으킨다.(호출하지 않은 쿼리도 EAGER 매치가 된 객체 쿼리가 수행됨)
따라서 상상하지 못한 쿼리가 수행됨.
*** 실무에서는 지연 로딩을 사용하라
@ManyToOne, @OneToOne은 기본이 즉시 로딩 -> 지연 로딩으로 설정
@OneToMany, @ManyToMany는 기본이 지연 로딩
JPQL fetch 조인이나, 엔티티 그래프 기능을 사용할 것