我对使用 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

我会建议,首先尝试插入硬编码值以查看它是否有效,然后再传递动态值。