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를 외부 클래스로 분리해주자 오류가 해결됐다.