Projections.constructor으로 설계한 Querydsl문을 Projections.fields으로 수정
Querdsl
@Override
public List<exampleDto> getList(Long id) {
return queryFactory.select(Projections.fields(memberResDto.class,
member.memberId.as("memberId"),
member.username.as("username"),
memberProfileImage.imageUrl.as("memberProfileImageUrl")
))
.from(member)
.leftJoin(memberImage).on(memberImage.member.eq(member))
.where(
member.memberId.eq(id)
)
.orderBy(member.createTime.desc())
.fetch();
}
아래와 같은 에러 발생
ExceptionHandlerExceptionResolver : Resolved [com.querydsl.core.types.ExpressionException: Dto]
알아보니 Projections의 경우 생성자 기반이 아닌 필드기반으로 가져올 때, 매칭 Dto에 기본 생성자가 필요하다.
Dto에 @NoArgsConstructor 어노테이션 추가하여 해결
@Data
@AllArgsConstructor
@NoArgsConstructor
class memberResDto {
//생략
}
참고
https://jhkimmm.tistory.com/30
https://ttl-blog.tistory.com/226