【发布时间】:2015-11-11 21:53:13
【问题描述】:
我将 MyBatis 与 Oracle 11g R2 数据库一起使用。我正在使用 MyBatis 3.3 和 ojdbc6 12.1.0.2。我的问题是每当我尝试插入一个空对象时,我都会得到以下结果。
org.springframework.jdbc.UncategorizedSQLException: 错误设置 null 对于带有 JdbcType OTHER 的参数#8。尝试设置不同的 此参数的 JdbcType 或不同的 jdbcTypeForNull 配置属性。原因:java.sql.SQLException:无效列 类型:1111
我的理解是在最新版本的 JDBC 中 null 被映射到 JdbcType.OTHERS 不是所有驱动程序都可以处理的,显然 Oracle 就是其中之一。
我在 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。
【问题讨论】:
标签: java jdbc oracle11g mybatis spring-mybatis