N+1 Issue
N+1 문제
상황
Member Class
@Entity
@Table(name = "member")
public class Member {
...
@Embedded
private Favorites favorites;
...
}Favorites Class
@Embeddable
public class Favorites {
...
@OneToMany(mappedBy = "member", cascade = {CascadeType.PERSIST, CascadeType.MERGE}, orphanRemoval = true)
private List<Favorite> favoriteCollection;
...
}FavoriteData Class
StationData Class
FavoriteDataRepository Class
문제
테스트 결과
하위 Station 만큼 퀴리 N개 및 favoritedate 테이블 조회 퀴리 1개 총 N+1 개 발생한다.
해결 방법
방법1: JPQL
조인을 사용해서 조회시 station 까지 가져온다
테스트 결과
방법2: EntityGraph
EntityGraph의 attributePaths를 사용해서 한번 가져온다
테스트 결과
장단점
JPQL 방식
EntityGraph 방식
결론
나의 선택
기타
멤버 조회시 FetchType Lazy 전략 사용
Last updated