私は古典的なセットアップを持っています
public class Parent {
Integer id;
...
// No generics
Collection someCollectionAttribute;
...
public void setChildren(Collection c) {
...
}
}
public class Child {
Integer id;
...
}
iBatis (バージョン 2.30 ... 聞かないでください) を使用して、これを通常のテーブル設定にマッピングしようとしています。
create table parents (
ID integer primary key
...
)
create table children (
ID integer primary key
PARENT_ID integer references parents(id)
...
)
私のマッピングファイルは次のようになります
<resultMap id="ParentResult" groupBy="id">
<result property="id" column="ID" />
...
<result property="children" resultMap="ChildResult" />
</resultMap>
<resultMap id="ChildResult">
<result property="id" column="ID" />
<result property="parentId" column="PARENT_ID" />
...
</result>
<sql id="loadParent" resultMap="ParentResult">
select P.ID as p1, ..., C.ID as c1, C.PARENT_ID as c2 ...
from parents P
join children C on (P.ID = C.PARENT_ID)
where P.ID = #id#
order by P.ID
</sql>
最初に通常のことを行うとsqlMap.queryForObject("loadParent", new Integer(42))
、セッター内で NullPointerException が発生し、setChildren
明らかに null 引数で呼び出されます (私の悪いことです)。セッターの修正はすべて正常に機能しますが、ログsetChildren
は単一の SQL ステートメントを実行する前に 1 回だけ呼び出され、引数が null であることを示しているため、ここで何が起こっているのか疑問に思っています。誰にも手がかりはありますか?