Ibatis resultmapとselectフィールドのいくらの問題

2376 ワード

以下:resultMap
 <resultMap id="userResult" class="com.eclink.uc.user.vo.UserVO" >
    <result column="USER_ID" property="userId" jdbcType="NUMBER" nullValue="0" />
    <result column="LOGIN_NAME" property="loginName" jdbcType="VARCHAR" nullValue=""/>
    <result column="REAL_NAME" property="realName" jdbcType="VARCHAR" nullValue=""/>
    <result column="STATUS" property="status" jdbcType="VARCHAR" nullValue=""/>
    <result column="TELEPHONE" property="telephone" jdbcType="VARCHAR" nullValue=""/>
    <result column="EMAIL" property="email" jdbcType="VARCHAR" nullValue=""/>
    <result column="CREATE_DATE" property="createDate" jdbcType="TIMESTAMP" nullValue="" />
    <result column="SEX" property="sex" jdbcType="TIMESTAMP" nullValue="" />
    <result column="MOBILE" property="mobile" jdbcType="TIMESTAMP" nullValue="" />
    <result column="DEFAULT_ORG_ID" property="defaultOrgId" jdbcType="NUMBER" nullValue="0" />
    <result column="DEFAULT_SYSTEM_CODE" property="defaultSystemCode" jdbcType="VARCHAR" nullValue="" />
  </resultMap>

 
select文は次のとおりです.
<select id="getUserById" resultMap="userResult" parameterClass="int">
		 <![CDATA[ select to_char(create_date,'YYYY-MM-DD') as CREATE_DATE,STATUS,REAL_NAME,LOGIN_NAME,CREATE_USER,USER_ID,SEX,TELEPHONE,MOBILE,EMAIL,to_char(last_update_date,'YYYY-MM-DD') as LAST_UPDATE_DATE,DEFAULT_ORG_ID  from UC_USER where USER_ID = #userId:NUMBER#  ]]>
	</select>

 
つまりselectにDEFAULT_がないSYSTEM_コードフィールドが出てきて、運転中にエラーが発生します
つまりSELECTで検出されたフィールド数はresultMapの数以上である
このように注意してください.元に書いたresultMapとselectが1つずつ対応している場合は、メンテナンス時に元のresultMapに直接フィールドを追加しないほうがいいです.複数のselect文がこのresultMapを参照している可能性があるからです.
最善の方法はresultMapを書いて上のresultMapから継承し、selectを書くことです.