Hello,  
I am trying to use iBatis in a case where I have an object hierarchy like the following:

class Foo{
   String fooString;
   Bar myBar;
   //getters and setters omitted
}

abstract class Bar{
   String barString;
   //getters and setters omitted
}

class SubBar extends Bar{
   String subBarString;
   //getters and setters omitted
}

I would like to be able to do this:

<resultMap id="fooResultMap" class="Foo">
   <result property="fooString" column="foo"/>
   <result property="myBar" resultMap="barResultMap"/>
</resultMap>

<resultMap id="barResultMap" class="SubBar">
   <result property="barString" column="bar"/>
   <result proprty="subBarString" column="sub_bar"/>
</resultMap>

<select id="fooSelect" parameterClass="string" resultClass="Foo" resultMap="fooResultMap">
   SELECT foo, bar, sub_bar FROM table WHERE foo = #value#
</select>

But that gives an InstantiationException (despite the fact that the barResultMap has the class SubBar, which is concrete, specified). Next I tried using a discriminator and making a separate barResultMap and subBarResultMap (where subBarResultMap extends barResultMap) with <subMap value="*" ...> on a column that is never null (I'm not sure if wildcard is supported - I couldn't find discriminator in the docs, but it's not listed on the undocumented features page). That still threw an exception. Next, I changed the select statement to (the equivalent of):

   SELECT foo, bar, sub_bar, 1 as use_submap FROM table WHERE foo = #value#

and used:

<discriminator column="use_submap" javaType="int">
        <subMap value="1" resultMap="subBarResultMap"/>
</discriminator>

But no go there either.

Is there any way to do this, short of creating a custom object factory?

        Thanks,

--
Kenny Pearce
Hx Technologies

Reply via email to