Trouble Shooting
QLRM 네이티브 쿼리 DTO type 오류
민뭉아치
2022. 4. 14. 16:24
1. 문제 사항
쿼리문을 실행 시, qrlm 라이브러리를 사용하여 DB의 결과를 DTO와 맵핑하는 과정에서 오류가 발생했다.
Service
...
JpaResultMapper result = new JpaResultMapper();
List<SubscribeDto> subscribeDtoList = result.list(query, SubscribeDto.class);
...
SubscribeDto
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class SubscribeDto {
private Long id;
private String username;
private String profileImageUrl;
private Long subscribeState;
private Long equalUserState;
}
2. 원인
UserEntity 생성 시, id의 타입을 Long 설정하니 MySQL에서 id의 타입을 확인해 본 결과 BIGINT로 설정되었다.
MySQL 데이터 타입과 Java 데이터 타입이 맞지않아 발생한 오류 같다.
MySQL의 BIGINT 데이터 타입은 Java에서 Long 또는 BigInteger 타입과 비교할 수 있다.
DTO의 타입을 Long으로 받았지만 오류가 발생한걸 보면 Unsigned라서 BigInteger을 받아야 하나보다.
3. 해결
DTO에서 BigInteger로 받아주니 잘 작동한다.
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class SubscribeDto {
private BigInteger id;
private String username;
private String profileImageUrl;
private BigInteger subscribeState;
private BigInteger equalUserState;
}
4. 참고
MySQL 데이터 타입 Java 데이터 타입 비교
TINYINT Integer BIT Boolean BOOL/BOOLEAN (TINYINT(1)) Integer SMALLINT Unsigned 상관없이 Integer MEDIUMINT Integer, Unsinged라면 Long INT Integer, Unsigned라면 Long BIGINT Long, Unsigned라면 java.ma..
goldfishhead.tistory.com