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 조인이나, 엔티티 그래프 기능을 사용할 것

'JPA > JPA' 카테고리의 다른 글

고아 객체  (0) 2020.06.09
영속성 전이(CASCADE)  (0) 2020.06.09
양방향 매핑 예제  (0) 2020.06.09
객체와 테이블 연관관계 매핑  (0) 2020.06.09
엔티티 매핑  (0) 2020.06.09