昨天与项目同事调程序,发现报一下错误,好是郁闷.
org.apache.ibatis.exceptions.PersistenceException:
Error updating database. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #22 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: com.ibm.db2.jcc.am.SqlException: [jcc][10271][10295][3.57.82] Unrecognized JDBC type: 1111. ERRORCODE=-4228, SQLSTATE=null
…………….
错误直接定向到对应的insert或者update的sqlmap.xml文件
<![CDATA[
INSERT INTO
CRM_CHANGE_REQUEST
(
REQ_ID,
CUST_ID,
CHANGE_TYPE,
CHANGE_TYPE_NAME,
CHANGE_FRM,
CHANGE_TO,
CHANGE_REASON,
CRT_USER_ID,
CRT_USER_NAME,
CRT_DATE,
PROCESS_ID,
ACTIVITY_ID,
AUDIT_DATE,
CHG_KIND
)
VALUES
(#{REQ_ID}, #{CUST_ID}, #{CHANGE_TYPE}, #{CHANGE_TYPE_NAME}, #{CHANGE_FRM}, #{CHANGE_TO}, #{CHANGE_REASON}, #{CRT_USER_ID}, #{CRT_USER_NAME}, #{CRT_DATE}, #{PROCESS_ID}, #{ACTIVITY_ID}, #{AUDIT_DATE}, #{CHG_KIND} ) ]]> </insert>
经过一番谷歌发现是如果null值得话,mybatis或者ibatis中要指定jdbctype,否则就会报错,主要原因是batis无法进行类型转换
其实经过试验,batis会默认对象为string对象,所以varchar的可以不指定jdbctype也不会报错,如果是数字或者日期类型如果可能为null值得话就必须进行转换
以上文件简单修改一下就可以不报错了,即指定jdbctype