使用Mybatis和ojdbc14.jar为参数设置null时出错

时间:2013-08-25 09:43:10

标签: java mybatis ojdbc

将参数设置为null时出错。

使用ojdbc14.jar时才会出现此问题。使用ojdbc6.jar时,没关系。

我在mybatis配置xml中有此设置

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

错误消息是:

Caused by: org.apache.ibatis.type.TypeException: Error setting null for parameter #1 with JdbcType NULL . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull

xml中的sql是

<update id="rename" parameterType="Element">
    update dsb_element t set t.elementname = #{elementName} where t.elementid = #{elementId}
</update>

java调用它是

 com.my.Element ele = new Element();
    ele.setElementId("some-id");
    ele.setElementName(null);
    sqlSession.update(getMyBatisId("rename"), element) ;

问题是:

这是ojdbc14.jar的问题,如果是,为什么?

我知道我可以使用#{elementName,jdbcType = VARCHAR2}来解决它,但我的项目到处都有很多这个问题,很快就会到期。我不想改变所有这些。

1 个答案:

答案 0 :(得分:5)

问题在于,从3.0.x版本开始,null参数的默认JDBC类型为Types.OTHER,某些JDBC驱动程序(如 Oracle 10g )不支持这种类型。

Here一篇解释此问题的帖子。

我发现的解决方案非常简单,我在配置文件中将jdbcTypeForNull设置为NULL

<configuration>
    <properties resource="mybatis-config.properties" />
    <settings>
        <setting name="jdbcTypeForNull" value="NULL" />
    </settings>

    <environments default="development">
    ....
    </environments>

    <mappers>
    ....
   </mappers>
</configuration>