ちゃんと基本わかってればはまらないことだけど。
エラー内容がわかりにくくてまたはまる可能性あるので。
一見大丈夫そうなsqlMapなのにNestedSQLExceptionが出る件。
com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in sqlMap/xml_name.xml.
--- The error occurred while applying a result map.
--- Check the namespace.resultMapId.
--- Check the result mapping for the 'propertyName' property.
--- Cause: com.ibatis.sqlmap.client.SqlMapException: Error getting nested result map values for 'basePictures'. Cause: java. sql.SQLException: Column 'column_name' not found.
…
Caused by: com.ibatis.sqlmap.client.SqlMapException: Error getting nested result map values for 'basePictures'. Cause: java.sql.SQLException: Column 'column_name' not found.
…
... 30 more
Caused by: java.sql.SQLException: Column 'column_name' not found.
…
で、↓がXML。
<resultMap id="pkResult" class="jp.co.aaaa.bbb.data.BaseItem" >
<result ・・・ />
</resultMap>
<!-- 検索結果 : 拡張Bean -->
<resultMap id="extResult" class="jp.co.aaaa.bbb.data.BaseItem" extends="pkResult">
…
<result property="namespace2Properties" resultMap="namespace2.extResult" />
<result property="namespace3Properties" resultMap="namespace3.extResult" />
</resultMap>
<!-- SQL文 : プライマリ検索 -->
<select id="selectByPrimaryKey" parameterClass="Integer" resultMap="extResult">
SELECT
<include refid="namespace1.select" />
,
<include refid="namespace2.select" />
FROM
namespace1 as baseitem
LEFT JOIN infonow_test.namespace2 as cndt
ON baseitem.namespace1_id = cndt.namespace1_id
WHERE
baseitem.namespace1_id = #Id#
</select>
<!-- SQL文 : 条件検索 -->
<select id="selectByOption" parameterClass="jp.co.aaa.bbb.dao.FindOption" resultMap="extResult">
SELECT
<include refid="namespace1.select" />
,
<include refid="namespace2.select" />
,
<include refid="namespace3.select" />
FROM
(
namespace1 as baseitem
LEFT JOIN namespace2 as cndt
ON baseitem.namespace1_id = cndt.namespace1_id
)
LEFT JOIN namespace3 as pict
ON baseitem.namespace1_id = pict.namespace1_id
<include refid="where" />
<include refid="orderBy" />
<include refid="limit" />
</select>
</sqlMap>
PK検索の時はnamespace3いらないんでJOINしてないんですが、プロパティーはextResultのresultmapで紐付けられてる。
ので、NestedSQLException発生。
そらそうだわな。
なので↓のようにResultMapをちゃんと分けて、使いたいメンバーにのみマッピングしてあげる。
<!-- プライマリ検索用ResultMap -->
<resultMap id="primaryResult" class="jp.co.aaa.bbb.data.BaseItem" extends="extResult" groupBy="namespace1_id">
<result property="namespace2Properties" resultMap="namespace2.extResult" />
</resultMap>
<!-- 条件検索用ResultMap -->
<resultMap id="optionResult" class="jp.co.aaa.bbb.data.BaseItem" extends="extResult" groupBy="namespace1_id">
<result property="namespace2Properties" resultMap="namespace2.extResult" />
<result property="namespace3Properties" resultMap="namespace3.extResult" />
</resultMap>
<!-- SQL文 : プライマリ検索 -->
<select id="selectByPrimaryKey" parameterClass="Integer" resultMap="primaryResult">
…
</select>
<!-- SQL文 : 条件検索 -->
<select id="selectByOption" parameterClass="jp.co.aaa.bbb.dao.FindOption" resultMap="optionResult">
…
</select>
30分ほど悩んだ。。。orz
最終更新:2010年02月25日 19:13