我对使用 MyBatis/java 看似简单的插入有疑问。
I'm having an issue with what would seem to be a simple insert using MyBatis/java.
我对使用 myBatis 和 java 进行的看似简单的插入操作有疑问。
例外情况是:
org.apache.ibatis.executor.ExecutorException:
Error preparing statement. Cause:
java.lang.ArrayIndexOutOfBoundsException:
Array index out of range: 12
我的映射器中的查询如下:
<insert id="insertRuleResult"
useGeneratedKeys="true"
keyProperty="ruleResult.recordDetailId"
keyColumn="RECORD_DETAIL_ID">
INSERT INTO KMV_DBO.RULE_RESULT(
RECORD_ID,
RECORD_DETAIL_ID,
SUBJECT_AREA_ID,
RULE_NAME,
RULE_RESULT,
MESSAGE,
COLUMN_NAME,
ORIGINAL_VALUE,
NEW_VALUE,
STATUS,
SOURCE,
USER_NOTE,
CREATED_DATE,
BATCH_STATUS,
UPDATED_BY,
UPDATED_DATE
)
VALUES (
KMV_DBO.RULE_IMPACTED_DETAIL_SEQ.NEXTVAL,
#{ruleResult.subjectAreaId,jdbcType=VARCHAR},
#{ruleResult.ruleName,jdbcType=VARCHAR},
#{ruleResult.ruleResult,jdbcType=VARCHAR},
#{ruleResult.message,jdbcType=VARCHAR},
#{ruleResult.columnName,jdbcType=VARCHAR},
#{ruleResult.originalValue,jdbcType=VARCHAR},
#{ruleResult.newValue,jdbcType=VARCHAR},
#{ruleResult.recordId,jdbcType=NUMERIC},
#{ruleResult.status,jdbcType=VARCHAR},
#{ruleResult.source,jdbcType=VARCHAR},
#{ruleResult.userNote,jdbcType=VARCHAR},
SYSDATE,
'Open',
#{user.nwieId,jdbcType=VARCHAR},
NULL
)
</insert>
我尝试了以下变体,但如果我不使用架构所有者 ID 进行连接,它也不起作用。错误是找不到序列:
<insert id="insertRuleResult">
<selectKey keyProperty="ruleResult.recordDetailId" keyColumn="RECORD_DETAIL_ID" resultType="int" order="BEFORE">
SELECT RULE_IMPACTED_DETAIL_SEQ.NEXTVAL FROM DUAL
</selectKey>
INSERT INTO KMV_DBO.RULE_RESULT(
RECORD_ID,
RECORD_DETAIL_ID,
SUBJECT_AREA_ID,
RULE_NAME,
RULE_RESULT,
MESSAGE,
COLUMN_NAME,
ORIGINAL_VALUE,
NEW_VALUE,
STATUS,
SOURCE,
USER_NOTE,
CREATED_DATE,
BATCH_STATUS,
UPDATED_BY,
UPDATED_DATE
) VALUES (
#{ruleResult.recordId,jdbcType=NUMERIC},
#{ruleResult.recordDetailId,jdbcType=NUMERIC},
#{ruleResult.subjectAreaId,jdbcType=VARCHAR},
#{ruleResult.ruleName,jdbcType=VARCHAR},
#{ruleResult.ruleResult,jdbcType=VARCHAR},
#{ruleResult.message,jdbcType=VARCHAR},
#{ruleResult.columnName,jdbcType=VARCHAR},
#{ruleResult.originalValue,jdbcType=VARCHAR},
#{ruleResult.newValue,jdbcType=VARCHAR},
#{ruleResult.status,jdbcType=VARCHAR},
#{ruleResult.source,jdbcType=VARCHAR},
#{ruleResult.userNote,jdbcType=VARCHAR},
SYSDATE,
'Open',
#{user.nwieId,jdbcType=VARCHAR},
NULL
)
</insert>
插入的值是基本字符串和数字。
感谢任何建议!
org.apache.ibatis.executor.ExecutorException:
Error preparing statement. Cause:
java.lang.ArrayIndexOutOfBoundsException:
Array index out of range: 12
这意味着它在第 13 个失败(因为内部数组是 zero-based)值是 SYSDATE
。
我会建议,首先尝试插入硬编码值以查看它是否有效,然后再传递动态值。
我对使用 myBatis 和 java 进行的看似简单的插入操作有疑问。
例外情况是:
org.apache.ibatis.executor.ExecutorException:
Error preparing statement. Cause:
java.lang.ArrayIndexOutOfBoundsException:
Array index out of range: 12
我的映射器中的查询如下:
<insert id="insertRuleResult"
useGeneratedKeys="true"
keyProperty="ruleResult.recordDetailId"
keyColumn="RECORD_DETAIL_ID">
INSERT INTO KMV_DBO.RULE_RESULT(
RECORD_ID,
RECORD_DETAIL_ID,
SUBJECT_AREA_ID,
RULE_NAME,
RULE_RESULT,
MESSAGE,
COLUMN_NAME,
ORIGINAL_VALUE,
NEW_VALUE,
STATUS,
SOURCE,
USER_NOTE,
CREATED_DATE,
BATCH_STATUS,
UPDATED_BY,
UPDATED_DATE
)
VALUES (
KMV_DBO.RULE_IMPACTED_DETAIL_SEQ.NEXTVAL,
#{ruleResult.subjectAreaId,jdbcType=VARCHAR},
#{ruleResult.ruleName,jdbcType=VARCHAR},
#{ruleResult.ruleResult,jdbcType=VARCHAR},
#{ruleResult.message,jdbcType=VARCHAR},
#{ruleResult.columnName,jdbcType=VARCHAR},
#{ruleResult.originalValue,jdbcType=VARCHAR},
#{ruleResult.newValue,jdbcType=VARCHAR},
#{ruleResult.recordId,jdbcType=NUMERIC},
#{ruleResult.status,jdbcType=VARCHAR},
#{ruleResult.source,jdbcType=VARCHAR},
#{ruleResult.userNote,jdbcType=VARCHAR},
SYSDATE,
'Open',
#{user.nwieId,jdbcType=VARCHAR},
NULL
)
</insert>
我尝试了以下变体,但如果我不使用架构所有者 ID 进行连接,它也不起作用。错误是找不到序列:
<insert id="insertRuleResult">
<selectKey keyProperty="ruleResult.recordDetailId" keyColumn="RECORD_DETAIL_ID" resultType="int" order="BEFORE">
SELECT RULE_IMPACTED_DETAIL_SEQ.NEXTVAL FROM DUAL
</selectKey>
INSERT INTO KMV_DBO.RULE_RESULT(
RECORD_ID,
RECORD_DETAIL_ID,
SUBJECT_AREA_ID,
RULE_NAME,
RULE_RESULT,
MESSAGE,
COLUMN_NAME,
ORIGINAL_VALUE,
NEW_VALUE,
STATUS,
SOURCE,
USER_NOTE,
CREATED_DATE,
BATCH_STATUS,
UPDATED_BY,
UPDATED_DATE
) VALUES (
#{ruleResult.recordId,jdbcType=NUMERIC},
#{ruleResult.recordDetailId,jdbcType=NUMERIC},
#{ruleResult.subjectAreaId,jdbcType=VARCHAR},
#{ruleResult.ruleName,jdbcType=VARCHAR},
#{ruleResult.ruleResult,jdbcType=VARCHAR},
#{ruleResult.message,jdbcType=VARCHAR},
#{ruleResult.columnName,jdbcType=VARCHAR},
#{ruleResult.originalValue,jdbcType=VARCHAR},
#{ruleResult.newValue,jdbcType=VARCHAR},
#{ruleResult.status,jdbcType=VARCHAR},
#{ruleResult.source,jdbcType=VARCHAR},
#{ruleResult.userNote,jdbcType=VARCHAR},
SYSDATE,
'Open',
#{user.nwieId,jdbcType=VARCHAR},
NULL
)
</insert>
插入的值是基本字符串和数字。
感谢任何建议!
org.apache.ibatis.executor.ExecutorException: Error preparing statement. Cause: java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 12
这意味着它在第 13 个失败(因为内部数组是 zero-based)值是 SYSDATE
。
我会建议,首先尝试插入硬编码值以查看它是否有效,然后再传递动态值。