728x90
반응형
Error
No converter found capable of converting from type [org.springframework.data.jpa.repository.query
1. 문제 인식
원자재 아이템 항목의 전체 재고를 한번에 조회하기 위한 쿼리를 만들었습니다.
Spring Data Jpa 를 사용하기 때문에 @Query를 이용해서 작성했습니다.
@Query(value =
"SELECT item.name AS itemName, SUM(material.count) AS sumCount, MAX(material.created_date) AS recentCreatedDate " +
"FROM material JOIN item ON item.id = material.item WHERE material.item_type='RAW' GROUP BY item.name;", nativeQuery = true)
List<ProductDto.TotalMaterialResponseDto> totalRawMaterial();
제가 작성한 Query는 다음과 같고, Query의 결과를 처리하기 위해 DTO를 만들어서 반환하려고 했습니다.
@Data
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public static class TotalMaterialResponseDto {
private String itemName;
private Integer sumCount;
private String recentCreatedDate;
}
}
DTO는 다음과 같이 만들어서 Query 결과에서 Alias와 일치하는 값으로 하여 매핑되도록 하였습니다.
* 오류 발생 *
No converter found capable of converting from type [org.springframework.data.jpa.repository.query]
2. 문제 해결
알고 보니 결과 필드에 대한 Getter 가 있는 Interface를 만들어서 프로젝션하면 바로 결과를 받을 수 있었습니다.
public static interface TotalMaterialResponseDto {
String getItemName();
Integer getSumCount();
LocalDateTime getRecentCreatedDate();
}
그래서 DTO 부분을 위와 같이 만들어서 Alias와 일치하는 값의 getter를 선언해주어 문제를 해결할 수 있었습니다.
마무리
nativeQuery의 결과를 Dto에 매핑하는 유일한 솔루션은 getter Interface를 만드는 것입니다.
오늘도 몰랐던 지식을 쌓을 수 있는 하루가 되었습니다.
포스팅 읽어주셔서 감사합니다.
[참고]
1. Spring JPA :: No converter found capable of converting from type
728x90
반응형
'Project > Management' 카테고리의 다른 글
[Management] Nginx - vue.js 새로고침 시 404 Error (2) | 2022.12.06 |
---|---|
[Management] QueryDSL : QueryReuslt Dto로 반환 & Join Error & Alias orderBy 참조 방법 (0) | 2022.11.09 |
[Management] QueryDSL : orderBy() - MultiSort 동적으로 적용 (0) | 2022.11.08 |
[Management] Nginx를 이용한 Vue.js와 Spring 배포 (0) | 2022.11.08 |
[Management] API 통신 시 로그 출력하는 필터 추가 (0) | 2022.11.03 |