Error getting ordinal list from JavaBean. Cause java.lang.NumberFormatExcept
原因:ibatis的bug导致iterater里面不支持这种写法,升级到2.3以上的版本就可以了。
<!-- 保存或修改账户清理信息集合 -->
<update id="saveOrUpdateAccountCleanList" parameterClass="java.util.ArrayList">
MERGE INTO AIMS_ACCOUNT_CLEAN AAC
USING
<iterate open="(" close=") A" conjunction="UNION">
SELECT
<!-- 主键为空时候返回字符串,与原类型不匹配,非字符串类型都需要做转换 -->
DECODE(#list[].cleanId#,NULL,NULL,#list[].cleanId#) AS CLEAN_ID,
DECODE(#list[].accountId#,NULL,NULL,#list[].accountId#) AS ACCOUNT_ID,
#list[].accountCode# AS ACCOUNT_CODE,
#list[].accountName# AS ACCOUNT_NAME,
#list[].noticeDate# AS NOTICE_DATE,
DECODE(#list[].needClean#,NULL,NULL,#list[].needClean#) AS NEED_CLEAN,
#list[].feedbackResult# AS FEEDBACK_RESULT,
#list[].undoReason# AS UNDO_REASON,
#list[].feedbackDate# AS FEEDBACK_DATE,
#list[].aacCreateTime# AS AAC_CREATE_TIME,
#list[].aacUpdateTime# AS AAC_UPDATE_TIME,
#list[].aacCreatePerson# AS AAC_CREATE_PERSON,
#list[].aacUpdatePerson# AS AAC_UPDATE_PERSON,
#list[].cleanStep# AS CLEAN_STEP
FROM DUAL
</iterate>
ON (A.CLEAN_ID = AAC.CLEAN_ID)
WHEN MATCHED THEN
UPDATE SET
AAC.AAC_UPDATE_TIME = A.AAC_UPDATE_TIME
<isNotEqual compareValue="" property="list[].accountId" prepend=",">
AAC.ACCOUNT_ID = A.ACCOUNT_ID
</isNotEqual>
<isNotEqual compareValue="" property="list[].accountName" prepend=",">
AAC.ACCOUNT_CODE = A.ACCOUNT_CODE
</isNotEqual>
<isNotEqual compareValue="" property="list[].accountName" prepend=",">
AAC.ACCOUNT_NAME = A.ACCOUNT_NAME
</isNotEqual>
<isNotEqual compareValue="" property="list[].noticeDate" prepend=",">
AAC.NOTICE_DATE = A.NOTICE_DATE
</isNotEqual>
<isNotEqual compareValue="" property="list[].needClean" prepend=",">
AAC.NEED_CLEAN = A.NEED_CLEAN
</isNotEqual>
<isNotEqual compareValue="" property="list[].feedbackResult" prepend=",">
AAC.FEEDBACK_RESULT = A.FEEDBACK_RESULT
</isNotEqual>
<isNotEqual compareValue="" property="list[].undoReason" prepend=",">
AAC.UNDO_REASON = A.UNDO_REASON
</isNotEqual>
<isNotEqual compareValue="" property="list[].feedbackDate" prepend=",">
AAC.FEEDBACK_DATE = A.FEEDBACK_DATE
</isNotEqual>
<isNotEqual compareValue="" property="list[].aacCreateTime" prepend=",">
AAC.AAC_CREATE_TIME = A.AAC_CREATE_TIME
</isNotEqual>
<isNotEqual compareValue="" property="list[].aacCreatePerson" prepend=",">
AAC.AAC_CREATE_PERSON = A.AAC_CREATE_PERSON
</isNotEqual>
<isNotEqual compareValue="" property="list[].aacUpdatePerson" prepend=",">
AAC.AAC_UPDATE_PERSON = A.AAC_UPDATE_PERSON
</isNotEqual>
<isNotEqual compareValue="" property="list[].cleanStep" prepend=",">
AAC.CLEAN_STEP = A.CLEAN_STEP
</isNotEqual>
<isNotEmpty prepend="," property="list[].accountCode">
AAC.ACCOUNT_CODE = A.ACCOUNT_CODE
</isNotEmpty>
<isNotEmpty prepend="," property="list[].accountName">
AAC.ACCOUNT_NAME = A.ACCOUNT_NAME
</isNotEmpty>
<isNotEmpty prepend="," property="list[].noticeDate">
AAC.NOTICE_DATE = A.NOTICE_DATE
</isNotEmpty>
<isNotEmpty prepend="," property="list[].needClean">
AAC.NEED_CLEAN = A.NEED_CLEAN
</isNotEmpty>
<isNotEmpty prepend="," property="list[].feedbackResult">
AAC.FEEDBACK_RESULT = A.FEEDBACK_RESULT
</isNotEmpty>
<isNotEmpty prepend="," property="list[].undoReason">
AAC.UNDO_REASON = A.UNDO_REASON
</isNotEmpty>
<isNotEmpty prepend="," property="list[].feedbackDate">
AAC.FEEDBACK_DATE = A.FEEDBACK_DATE
</isNotEmpty>
<isNotEmpty prepend="," property="list[].aacCreateTime">
AAC.AAC_CREATE_TIME = A.AAC_CREATE_TIME
</isNotEmpty>
<isNotEmpty prepend="," property="list[].aacCreatePerson">
AAC.AAC_CREATE_PERSON = A.AAC_CREATE_PERSON
</isNotEmpty>
<isNotEmpty prepend="," property="list[].aacUpdatePerson">
AAC.AAC_UPDATE_PERSON = A.AAC_UPDATE_PERSON
</isNotEmpty>
<isNotEmpty prepend="," property="list[].cleanStep">
AAC.CLEAN_STEP = A.CLEAN_STEP
</isNotEmpty>
WHEN NOT MATCHED THEN
INSERT (
CLEAN_ID,
ACCOUNT_ID,
ACCOUNT_CODE,
ACCOUNT_NAME,
NOTICE_DATE,
NEED_CLEAN,
FEEDBACK_RESULT,
UNDO_REASON,
FEEDBACK_DATE,
AAC_CREATE_TIME,
AAC_UPDATE_TIME,
AAC_CREATE_PERSON,
AAC_UPDATE_PERSON,
CLEAN_STEP
) VALUES (
AIMS_ACCOUNT_CLEAN_SEQ.NEXTVAL,
A.ACCOUNT_ID,
A.ACCOUNT_CODE,
A.ACCOUNT_NAME,
A.NOTICE_DATE,
A.NEED_CLEAN,
A.FEEDBACK_RESULT,
A.UNDO_REASON,
A.FEEDBACK_DATE,
A.AAC_CREATE_TIME,
A.AAC_UPDATE_TIME,
A.AAC_CREATE_PERSON,
A.AAC_UPDATE_PERSON,
A.CLEAN_STEP
)
</update>
参考:https://bbs.youkuaiyun.com/topics/230003000