Oracle 11g R2 データベースで MyBatis を使用しています。ojdbc6 12.1.0.2 で MyBatis 3.3 を使用しています。私の問題は、null のオブジェクトを挿入しようとするたびに次のようになることです。
org.springframework.jdbc.UncategorizedSQLException: JdbcType OTHER のパラメータ #8 に null を設定中にエラーが発生しました。このパラメーターに別の JdbcType を設定するか、別の jdbcTypeForNull 構成プロパティーを設定してみてください。原因: java.sql.SQLException: 列の型が無効です: 1111
私の理解では、最新バージョンの JDBC null は JdbcType.OTHERS にマップされており、すべてのドライバーが処理するわけではなく、明らかに Oracle もその 1 つです。
MyBatis 構成で次のことを試しましたが、まだ運がありません。
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setTypeAliasesPackage("org.ohtech.innovationexchange.core.domain");
sessionFactory.setTransactionFactory(springManagedTransactionFactory());
sessionFactory.setConfigurationProperties(getProperties());
return sessionFactory.getObject();
}
@Bean(name = "transactionManager")
public DataSourceTransactionManager dataSourceTransactionManager() throws PropertyVetoException{
return new DataSourceTransactionManager(dataSource());
}
@Bean
public SpringManagedTransactionFactory springManagedTransactionFactory() {
return new SpringManagedTransactionFactory();
}
private Properties getProperties() {
final Properties myBatisProperties = new Properties();
myBatisProperties.put("jdbcTypeForNull", "NULL");
return myBatisProperties;
}
マッパーファイルで次のことを行うことで機能させることができますが、本当に反復的で醜いようです。MyBatis が私のプロパティを使用していない理由がわからないので、SqlSessionFactory Bean を渡しています。