将参数设置为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}来解决它,但我的项目到处都有很多这个问题,很快就会到期。我不想改变所有这些。
答案 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>