問題一20150509——mybatis的配置檔案useGeneratedKeys屬性(報java.lang.ArrayIndexOutOfBoundsException)
阿新 • • 發佈:2019-01-06
在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>