myBatis 부적합한 열 유형 오류발생원인
Posted 2013. 12. 8. 19:08Spring + myBatis를 이용하여 Oracle DB작업을 하는중 insert문에서 아래와 같은 오류가 발생합니다.
error code [17004]; Invalid column type;
org.springframework.jdbc.UncategorizedSQLException: Error setting null for parameter #11 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: Invalid column type
; uncategorized SQLException for SQL []; SQL state [null]; error code [17004]; Invalid column type; nested exception is java.sql.SQLException: Invalid column type
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:71)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:365)
at $Proxy18.insert(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:237)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:79)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:40)
at $Proxy27.insertDailyReport(Unknown Source)
입력되는 변수들의 값을 디버깅으로 찍어보니 몇몇 컬럼의 값이 null로 넘어갑니다.
이상하다? null을 넣을수 없는건 아닐텐데... 물론 컬럼은 Nullable형태입니다.
쿼리와 변수를 조합해서 직접 쿼리를 날리면 정상적으로 insert됩니다.
검색을 해보니 myBatis의 특성(?) 때문인것 같습니다.
이전 MySQL 을 사용할때는 전혀 고려하지 않았는데, 이상합니다.
iBatis, myBatis 모두 Oracle을 사용할때는 다음과 같이 nullable column을 사용하기 위한 처리를 해줘야 합니다.
jdbcType=VARCHAR
예제를 보면 다음과 같습니다
insert into (emp_no, emp_name) values ( #{empNo, jdbcType=INTEGER}, #{empName, jdbcType=VARCHAR})
iBatis에서는 다음과 같이 사용합니다.
(#id:VARCHAR#, #name:VARCHAR#, #title:VARCHAR#)
insert into (emp_no, emp_name) values ( #empNo:INTEGER#, #empName:VARCHAR#)
자세한 내용은 아래 사이트에서 참고하면 됩니다.
http://mybatis.github.io/mybatis-3/ko/index.html
mybatis-config settings를 이용해서도 위의 사항을 처리할수 있습니다.
>>> Added by UncleJoe
'개발노트' 카테고리의 다른 글
nexus, jetty, proxy를 이용하여 redmine + svn 과 함께 사용하기 (0) | 2014.03.17 |
---|---|
function must be used with a prefix when a default namespace is not specified (0) | 2014.01.05 |
eclipse 대/소문자 단축키 (0) | 2013.10.29 |
[Tip]Microsoft Project 들여쓰기 단축키 (0) | 2013.10.10 |
Maven SCM Project read error 발생원인 (0) | 2013.09.25 |
- Filed under : 개발노트