1. 程式人生 > >問題一20150509——mybatis的配置檔案useGeneratedKeys屬性(報java.lang.ArrayIndexOutOfBoundsException)

問題一20150509——mybatis的配置檔案useGeneratedKeys屬性(報java.lang.ArrayIndexOutOfBoundsException)

在mybatis配置檔案中的insert語句如下時

 <insert id="insert" parameterType="TBookmark" >
        insert into t_bookmark (BOOKMARK_ID, BOOKMARK_NAME, USER_ID, 
          CONTENT_ID, CHAPTER_ID, CHAPTER_NAME, 
          SECTION, PAGE, POSITION, 
          BOOKMARK_TYPE, BOOKMARK_CREATE_TIME, CONTENT_NAME, 
          SERIAL_NUM, BUSINESS_SORT_ID, BSSORT_NAME,BOOKMARK_SYSTEM_TIME
          )
        values (#{bookmarkId,jdbcType=DECIMAL
}
, #{bookmarkName,jdbcType=VARCHAR}, #{userId,jdbcType=DECIMAL}, #{contentId,jdbcType=DECIMAL}, #{chapterId,jdbcType=DECIMAL}, #{chapterName,jdbcType=VARCHAR}, #{section,jdbcType=DECIMAL}, #{page,jdbcType=DECIMAL}, #{position,jdbcType=DECIMAL}, #{bookmarkType,jdbcType=VARCHAR
}
, #{bookmarkCreateTime,jdbcType=TIMESTAMP}, #{contentName,jdbcType=VARCHAR}, #{serialNum,jdbcType=DECIMAL}, #{businessSortId,jdbcType=DECIMAL}, #{bssortName,jdbcType=VARCHAR},#{bookmarkSystemTime,jdbcType=TIMESTAMP} ) </insert>

useGeneratedKeys的屬性預設為true,也就是說主鍵用的是自動生成,這是當傳進來的實體中TBookmark已設定了主鍵時,程式會報java.lang.ArrayIndexOutOfBoundsException,因為實體中有了主鍵,mybatis又自動幫我們生成了一個主鍵,屬性值多出一個了,只要設定useGeneratedKeys屬性為false,就用到了實體傳進來的主鍵值了,如下

 <insert id="insert" parameterType="TBookmark" useGeneratedKeys="false">
        insert into t_bookmark (BOOKMARK_ID, BOOKMARK_NAME, USER_ID, 
          CONTENT_ID, CHAPTER_ID, CHAPTER_NAME, 
          SECTION, PAGE, POSITION, 
          BOOKMARK_TYPE, BOOKMARK_CREATE_TIME, CONTENT_NAME, 
          SERIAL_NUM, BUSINESS_SORT_ID, BSSORT_NAME,BOOKMARK_SYSTEM_TIME
          )
        values (#{bookmarkId,jdbcType=DECIMAL}, #{bookmarkName,jdbcType=VARCHAR}, #{userId,jdbcType=DECIMAL}, 
          #{contentId,jdbcType=DECIMAL}, #{chapterId,jdbcType=DECIMAL}, #{chapterName,jdbcType=VARCHAR}, 
          #{section,jdbcType=DECIMAL}, #{page,jdbcType=DECIMAL}, #{position,jdbcType=DECIMAL}, 
          #{bookmarkType,jdbcType=VARCHAR}, #{bookmarkCreateTime,jdbcType=TIMESTAMP}, #{contentName,jdbcType=VARCHAR}, 
          #{serialNum,jdbcType=DECIMAL}, #{businessSortId,jdbcType=DECIMAL}, #{bssortName,jdbcType=VARCHAR},#{bookmarkSystemTime,jdbcType=TIMESTAMP}
          )

  </insert>