我有经典设置
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))
的做法会导致 setter 内部出现 NullPointerException ,setChildren
这显然是用 null 参数调用的(我的错)。修复 setter 一切正常,但是日志显示setChildren
在运行单个 SQL 语句之前只调用了一次,仍然带有一个空参数,所以我想知道这里发生了什么。有人有任何线索吗?