본문 바로가기
개발

[Oracle 부적합한 열 유형 1111] Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #3 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property.

by 견과류! 2020. 3. 18.

 

 

Caused by: org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='value1', 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 #3 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 부적합한 열 유형: 1111 

 

 

스프링부트 프로젝트 테스트 중, 위와 같은 오류가 발생하였다.

원인은 MyBatis 쿼리 호출 시 Oracle DB상에 nullable로 설정되어있는 'value1' 이라는 필드값이 null로 넘어왔기 때문에 발생하는 오류이다. (띠용)

 

#해결방법

1. 수정할 필드가 한 두개일 때

해당 값을 #{value1, jdbcType=VARCHAR} 이렇게 값 뒤에 , jdbcType = VARCHAR 를 추가해준다.

 

 

2.  수정할 필드가 많을 때

일일히 jdbcType=VARCHAR를 써주지 않도록 아예 설정파일을 수정해준다.


 

    1)  sqlSessionFactory 설정해주는 코드안에 setJdbcTypeForNull(JdbcType.NULL) 로 설정해주거나

 

@Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { 
	
    SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); 
    sessionFactory.setDataSource(dataSource); 
    sessionFactory.setTypeAliasesPackage("com.xxx.mapper"); 
    
    SqlSessionFactory sqlSessionFactory = sessionFactory.getObject(); 
    sqlSessionFactory.getConfiguration().setJdbcTypeForNull(JdbcType.NULL); 
    
    return sqlSessionFactory; 
 }


    2) config.xml 에 <configuration> 태그에 jdbcTypeForNull 세팅 추가

 

         <settings> <setting name="jdbcTypeForNull" value="NULL" /> </settings>

 


 

    * 2번은 두 개의 방법 중 하나만 하면 됨.. 

 

 

 

이렇게 해주면 정상 동작!