Framework/Persistent
Mybatis 부적합한 열 유형: 1111 관련 오류가 날때
호형
2020. 11. 11. 13:14
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" /> 를 넣어준다.
끝!