JPA의 N + 1 문제는 무엇일까?

JPA N+1


연관 관계가 설정된 엔티티를 조회할 경우
조회된 데이터 개수(N)만큼 연관 관계의 조회 쿼리가 추가로 발생하는 현상


findAll method의 글로벌 패치 전략 별 문제 상활

글로벌 패치 전략을 즉시 로딩으로 설정하고 findAll()을 실행하면 N+1 문제가 발생하지 않는다.
연관 관계에 있느느 엔티티를 실제 객체 대신 프록시 객체로 생성하여 주입하기 때문이다.
하지만 프록시 객체를 사용할 경우에 실제 데이터가 필요하여 조회하는 쿼리가 발생하고 N+1 문제가 발생할 수 있다.

어떻게 해결할 수 있을까?

fetch join @EntityGraph
연관 관계에 있는 엔티티를 한번에 즉시 로딩하는 구문

select distinct u
from User u
left join fetch u.posts
@EntityGraph(attributePaths = {"posts"}, type = EntityGraphType.FETCH)
List<User> findAll();

Categories:

Updated:

Leave a comment