2015-08-18 41 views
3

我正在使用MyBatis和Oracle 11g R2數據庫。我正在使用MyBatis 3.3和ojdbc6 12.1.0.2。我的問題是每當我試圖插入一個空的對象,我得到以下。MyBatis - jdbcTypeForNull Oracle

org.springframework.jdbc.UncategorizedSQLException:錯誤設置爲null 的參數#8的jdbcType其他。嘗試爲此參數設置不同的 JdbcType或設置不同的jdbcTypeForNull 配置屬性。原因:值java.sql.SQLException:無效的列 類型:1111

我的理解是在最新版本的JDBC空的映射到的,但並不是所有的驅動程序處理JdbcType.OTHERS,顯然甲骨文就是其中之一。

我在我的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。

+0

[MyBatis的ORA-01745的可能重複:無效的主機/綁定變量名稱](http://stackoverflow.com/questions/32081980/mybatis-ora-01745-invalid-host-bind-variable-name) – Andreas

回答

4

「jdbcTypeForNull」不是「屬性」,而是「設置」。我猜,目前無法通過java config進行設置。你需要這樣的config.xml文件:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration> 
    <settings> 
     <setting name="jdbcTypeForNull" value="NULL" /> 
    </settings> 
</configuration> 

,並使用sessionFactory.setConfigLocation(...)。

對於設置和屬性信息請參考文檔之間的差別: https://mybatis.github.io/mybatis-3/configuration.html

2

也許它晚了,但這裏是解決方案:

@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; 
} 
相關問題