티스토리 뷰
org.mybatis.spring.MyBatisSystemException:
nested exception is org.apache.ibatis.type.TypeException:
Could not set parameters for mapping:
ParameterMapping{property='_skiprows', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}.
Cause: org.apache.ibatis.type.TypeException:
Error setting null for parameter #1 with JdbcType OTHER .
Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property.
Cause: java.sql.SQLException: 부적합한 열 유형: 1111
개발을 하다 보니 위와 같은 오류가 발생을 하였다. DB는 Oracle이다.
원인은 오류로그에 명확하게 나와 있다. parameter로 들어와야 할 값이 안들어와서 오류가 발생했다고 한다.
<select id="retrieveStudent" resultType="sample.template.model.Student">
<![CDATA[
SELECT * FROM (
SELECT ROWNUM AS RNUM, A.* FROM (
SELECT student_id,
student_name,
FROM SAMPLE_STUDENT
) A WHERE ROWNUM <= #{_skiprows} + #{_pagesize}
) WHERE RNUM > #{_skiprows}
]]>
</select>
SQL은 바로 이런 모습이었는데 paging을 하기 위한 요소인 _skiprows의 값이 null이 넘어와서 생긴 문제이다.
해결책은
- parameter가 null이 되지 않도록 넘겨준다.
- parameter가 null이 들어오는 경우도 있다면 #{_skiprows, jdbcType=VARCHAR} 로 변경을 해준다.
- mybatis-config.xml (mybatis 설정파일) 에 들어가서 <setting name="jdbcTypeForNull" value="NULL" /> 를 넣어준다.
끝!
'Framework > Persistent' 카테고리의 다른 글
MyBatis Mapping 방식 (Query ID vs Interface) (0) | 2021.01.22 |
---|---|
MyBatis란? 기본설정 및 사용방법 (1) | 2020.11.16 |
Server returned HTTP response code: 503 for URL: http://mybatis.org/dtd/mybatis-3-config.dtd 오류 조치 (0) | 2020.11.06 |
MyBatis 성능 향상시키는 방법 (with fetchSize, mapUnderscoreToCamelCase) (0) | 2020.06.26 |
MyBatis foreach를 이용하여 성능 개선하기 (0) | 2020.06.24 |
댓글