Querydsl - Projections.fields 에서 발생한 ExpressionException

괭이밥·2023년 4월 19일

에러 해결

목록 보기
2/4

에러 발생 상황

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

profile
개발도 하고 싶은 클라우드 엔지니어

0개의 댓글