Spring Boot의 Dao에 MySQL에 접근하는 쿼리문을 적는다.
여기서 서브쿼리문을 사용하였는데, 'b-4'가 서브쿼리의 결과이기때문에 서브쿼리때문에 발생하는 문제로 추측한다.
Dao의 해당 코드
/*
* 각 필터의 질문 가져오기 API
*/
public GetQuestionRes getQuestion(String filterId, int userIdxByJwt){
String getQuestionQuery = "select ID as qnaQuestionId ,CONTENTS as question, (select COUNT(*) from QUESTION where FILTER_ID = ? and ID NOT IN (select QNA_QUESTION_ID from POST where USER_ID = ? and FILTER_ID = ?)) as numberOfRemaning from QUESTION where FILTER_ID = ? and ID NOT IN (select QNA_QUESTION_ID from POST where USER_ID = ? and FILTER_ID = ?) ORDER BY RAND() LIMIT 1;";
return this.jdbcTemplate.queryForObject(getQuestionQuery,
(rs,rowNum) -> new GetQuestionRes(
rs.getInt("qnaQuestionId"),
rs.getString("question"),
rs.getInt("numberOfRemaning")),
filterId, userIdxByJwt, filterId, filterId, userIdxByJwt, filterId);
}
한방쿼리로 짜서, 쿼리문이 참 길다 ..ㅎㅎ
서브쿼리로 가져오는 ID NOT IN (select QNA_QUESTION_ID ~)
에서 ID가 문제인것같다.
❓원래 서브쿼리의 값은 타입을 판별하지 못하는건가..?
이전에는 그러지않았던것같은데..
쿼리문을 분리하여 작성해보려던 순간, DTO를 확인하다가 문제를 발견하였다.
questionId는 DB에 String타입으로 들어가있는데, DTO에서도 int type으로 선언해두었고, Dao에도 rs.gerInt()로 받고있었다
💢Cannot determine value type
서브쿼리의 문제가아니라, DB의 타입과 코드의 타입이 불일치해서 발생하는 에러였구나!
DTO 파일 : int -> String 변경
Dao 파일 : rs.getInt() -> rs.getString() 변경
해결!!
배우고간다.