J'ai la configuration configuration classiquecartographie des relations parent-enfant avec iBatis
public class Parent {
Integer id;
...
// No generics
Collection someCollectionAttribute;
...
public void setChildren(Collection c) {
...
}
}
public class Child {
Integer id;
...
}
et je suis en train de cartographier cela sur la table habituelle en utilisant iBatis (version 2.30 ... ne demandez pas).
create table parents (
ID integer primary key
...
)
create table children (
ID integer primary key
PARENT_ID integer references parents(id)
...
)
Mon fichier de mappage ressemble à ce
<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>
Faire la sqlMap.queryForObject("loadParent", new Integer(42))
habituelle d'abord provoqué une NullPointerException à l'intérieur du poseur setChildren
qui est apparemment appelé avec un argument nul (mon mauvais). La correction du setter fonctionne très bien, mais les journaux montrent que setChildren
est appelée une seule fois avant même d'exécuter une seule instruction SQL, toujours avec un argument null, donc je me demande ce qui se passe ici. Quelqu'un a des indices?
Je reçois Il n'y a pas de carte nommé result « childResult » toute aide appréciée. –