8

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 を渡しています。

4

5 に答える 5

3

mybatis Spring Boot starterを使用している場合、これは、application.propertiesこの問題を修正するために追加できるプロパティです。

mybatis.configuration.jdbc-type-for-null=NULL
于 2019-05-02T15:51:28.340 に答える