[Spring Boot] JPQL로 DTO 매핑하던 중 에러

코코코딩을 합시다·2024년 5월 22일

jpql로 데이터를 Select 해와 DTO와 매핑하는 쿼리문에서 자꾸 영문 모를 오류가 발생했다.

원인 코드는 다음과 같다.

    @Query("SELECT new com.example.myrok.dto.DashBoardDTO.TagDTO(rt.tagName, COUNT(rt)) " +
            "FROM RecordTag rt " +
            "WHERE rt.projectId = :projectId AND rt.deleted = false " +
            "GROUP BY rt.tagName " +
            "ORDER BY COUNT(rt) DESC")

에러 코드는 다음과 같았다.

Could not create query for public abstract java.util.List com.example.myrok.repository.RecordTagRepository.findTagNameAndCountByProjectIdAndDeletedIsFalse(java.lang.Long); Reason: Validation failed for query for method public abstract java.util.List com.example.myrok.repository.RecordTagRepository.findTagNameAndCountByProjectIdAndDeletedIsFalse(java.lang.Long)

에러 이유도 제대로 안 알려줘서 정말 미치고 환장할 뻔.
원인은 JPQL에서는 내부 DTO 클래스에 대한 매핑은 지원하지 않는다는 것이었다.
DTO 편하게 쓸라고 내부 클래스로 선언했더니 경로를 인식하지 못했다는거..

TagDTO를 외부 클래스로 분리해주자 오류가 해결됐다.

profile
좋아하는 걸로 밥 벌어먹기

0개의 댓글