728x90
Projections.constructor(MemberDto.class, ...)를 사용하여 DTO로 필요한 필드만 조회할 때에는, 이런 경우에는 fetchJoin을 사용할 필요가 없습니다.
그 이유는 다음과 같습니다
- DTO로 필요한 필드만 조회하기 때문입니다.
fetchJoin은 일반적으로 엔터티를 조회할 때 지연 로딩을 방지하기 위해 사용됩니다.
하지만 현재 코드에서는 MemberDto에 매핑할 필드만 선택적으로 조회하고 있기 때문에,
엔터티 그래프를 탐색할 필요가 없습니다. - 엔터티를 조회하는 것이 아닙니다.
fetchJoin은 엔터티를 조회할 때만 의미가 있는 기능입니다.
그런데 지금 작성하신 쿼리는 MemberDto를 조회하는 것이므로,
영속성 컨텍스트와 관계없이 필요한 데이터만 가져오면 충분합니다. - 성능 최적화에도 불필요합니다.
fetchJoin은 여러 엔터티를 한 번에 가져와 N+1 문제를 해결할 때 주로 사용됩니다.
그러나 현재는 DTO 변환을 위해 필요한 필드만 가져오고 있어서,
fetchJoin 없이도 효율적으로 데이터를 조회할 수 있습니다.
언제 fetchjoin을 사용해야 할까?
queryFactory.selectFrom(member)
.join(member.team, team).fetchJoin()
.where(searchPredicate(cond))
.fetch();
결론 : Member 엔터티 자체를 조회하면서 Team도 함께 로딩해야 한다면,
다음과 같이 fetchJoin()을 사용해야 합니다. Entity 자체를 조회할 때, fetchjoin()을 사용하여, N+1의 문제를 해결합니다.
'JPA & Querydsl' 카테고리의 다른 글
| 📝 대규모 시스템을 위한 효율적인 계층형 메뉴 관리 시스템 구축 전략 (Spring Boot, JPA, QueryDSL 활용) (0) | 2025.12.09 |
|---|---|
| Spring Data JPA와 QueryDSL에서 동적 쿼리 처리하기 (0) | 2025.03.08 |
| fetchResults(), fetchCount() deprecated된 이유(Querydsl) (0) | 2024.05.20 |
| Transaction에 대하여 깊이있게.. (1) | 2023.12.28 |
| JPA 연관관계 매핑 (0) | 2023.12.05 |