Hello, regarding my last question, let me simplify this question:
I have a resultMap that contains another select statement that populates
one of the column,
If the resultMap contains 10 column, which 2 of them contains another
select statement, then this is what happens:
- if i map the results to a Map or a class, then the result is
correct (10 columns)
- if i use resultMap="xml", then the result is only 8 columns
(without the 2 which contains another select)
have anyone experienced this before? or a bug?
Thanks,
Yusuf.
-----Original Message-----
From: Yusuf
Sent: Tuesday, February 07, 2006 2:02 PM
To: [email protected]
Subject: Different Number of Columns in resultClass with xml and with
HashMap
Hi,
I have a working query and the resultmap is like this:
<resultMap id="resultParent" class="java.util.HashMap">
<result property="NAMA_PP" column="NAMA_PP" javaType="string"
jdbcType="VARCHAR2" nullValue=""/>
<result property="BEGDATE" column="BEGDATE" javaType="string"
jdbcType="VARCHAR2" nullValue=""/>
<result property="ENDDATE" column="ENDDATE" javaType="string"
jdbcType="VARCHAR2" nullValue=""/>
<result property="SAR_POLIS" column="{spaj=REG_SPAJ,
tahunKe=TAHUN_KE}" javaType="double" jdbcType="NUMBER" nullValue="0"
select="selectChild1"/>
<result property="MSPR_PREMIUM" column="MSPR_PREMIUM"
javaType="double" jdbcType="NUMBER" nullValue="0"/>
<result property="PREMI_RIDER" column="REG_SPAJ"
javaType="double" jdbcType="NUMBER" nullValue="0"
select="selectChild2"/>
<result property="PREMI_EXTRA" column="REG_SPAJ"
javaType="double" jdbcType="NUMBER" nullValue="0"
select="selectChild3"/>
</resultMap>
So far there is no problem (all the inner fields also populated with the
selectChild1, selectChild2, ..),
but when i tried changing the resultMap class to xml like this:
<resultMap id="resultParent" class="xml">
<result property="NAMA_PP" column="NAMA_PP" javaType="string"
jdbcType="VARCHAR2" nullValue=""/>
<result property="BEGDATE" column="BEGDATE" javaType="string"
jdbcType="VARCHAR2" nullValue=""/>
<result property="ENDDATE" column="ENDDATE" javaType="string"
jdbcType="VARCHAR2" nullValue=""/>
<result property="SAR_POLIS" column="{spaj=REG_SPAJ,
tahunKe=TAHUN_KE}" javaType="double" jdbcType="NUMBER" nullValue="0"
select="selectChild1"/>
<result property="MSPR_PREMIUM" column="MSPR_PREMIUM"
javaType="double" jdbcType="NUMBER" nullValue="0"/>
<result property="PREMI_RIDER" column="REG_SPAJ"
javaType="double" jdbcType="NUMBER" nullValue="0"
select="selectChild2"/>
<result property="PREMI_EXTRA" column="REG_SPAJ"
javaType="double" jdbcType="NUMBER" nullValue="0"
select="selectChild3"/>
</resultMap>
and used a custom type handler to process the xml like this (i'm using
dom4j):
static class XmlRowHandler implements RowHandler {
private Document domDocument;
public XmlRowHandler(String xmlResultName) {
domDocument = DocumentHelper.createDocument();
getDomDocument().addElement(xmlResultName);
}
public void handleRow(Object object) {
try {
Document xmlFragment = DocumentHelper
.parseText((String) object);
Element xmlElement =
xmlFragment.getRootElement();
getDomDocument().getRootElement().add(xmlElement);
} catch (DocumentException e) {
}
}
public Document getDomDocument() {
return domDocument;
}
}
private Document queryXml(String queryId, Object param) {
RowHandler rowHandler = new XmlRowHandler("result");
getSqlMapClientTemplate().queryWithRowHandler(queryId, param,
rowHandler);
Document doc = ((XmlRowHandler) rowHandler).getDomDocument();
return doc;
}
the result is different. Only the columns without inner selects are
shown, so instead of having 7 columns per row, there is only 4 columns
per row. I have used this custom xml handler for other queries and it
ran well.
Is this a bug in ibatis, or I've done something wrong?
Thank you for your help and regards,
Yusuf S.