@QueryProjection
🧩 @QueryProjection
정의
@QueryProjection은 Querydsl에서 생성자 기반 DTO 조회를 타입 안전하게 사용하기 위한 애너테이션이다. DTO 생성자에 붙이면 Querydsl이 해당 생성자에 맞는 Q타입을 만들어준다.
select 결과를 DTO로 받을 때 컴파일 시점에 생성자 매핑 오류를 줄일 수 있다.
🧩 역할
- 생성자 기반 DTO 조회를 타입 안전하게 만든다
- Querydsl이 QDTO를 생성하도록 돕는다
- 조회 결과를 엔티티가 아닌 DTO로 받을 때 유용하다
- 컬럼 순서 오류를 줄이는 데 도움이 된다
🛠 사용법
DTO 생성자에 적용
import com.querydsl.core.annotations.QueryProjection;
public class UserSummary {
private final Long id;
private final String name;
@QueryProjection
public UserSummary(Long id, String name) {
this.id = id;
this.name = name;
}
}
Querydsl에서 사용
List<UserSummary> result = queryFactory
.select(new QUserSummary(user.id, user.name))
.from(user)
.fetch();
🧩 특징
- 생성자 파라미터 순서와 타입이 중요하다
- DTO 생성자에 애너테이션을 붙여야 한다
- Querydsl APT 설정이 필요하다
- QDTO 클래스를 생성한 뒤 그 타입을 사용한다
⚠️ 주의사항
- 생성자 파라미터와
select컬럼 타입이 맞아야 한다. - Querydsl APT가 설정되어 있어야 Q타입이 생성된다.
- 엔티티 조회보다 DTO 조회에 적합하다.
- 하나의 생성자 매핑을 기준으로 사용하므로 구조를 단순하게 유지하는 것이 좋다.
📌 정리
@QueryProjection은 Querydsl의 타입 안전한 DTO 조회를 위한 애너테이션이다.- DTO 생성자에 붙이고, 생성된
QDTO로 조회한다. - 복잡한 조회 결과를 안정적으로 DTO로 받고 싶을 때 유용하다.
댓글남기기