티스토리 뷰

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이 넘어와서 생긴 문제이다. 

 

해결책은 

  1. parameter가 null이 되지 않도록 넘겨준다. 
  2. parameter가 null이 들어오는 경우도 있다면 #{_skiprows, jdbcType=VARCHAR} 로 변경을 해준다. 
  3. mybatis-config.xml (mybatis 설정파일) 에 들어가서 <setting name="jdbcTypeForNull" value="NULL" /> 를 넣어준다. 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31