Hi Clinton,
 
That totally worked. Additionally, I put a typeHandler on the parameter map so 
it could know to just set the ID when persisting.
Thanks a ton for that. I was reading docs last night and saw the resultMapping 
attribute, but assumed it would only work for lists.
 
Regards,
Dustin
 
ps. See you next week.
 

>>> "Clinton Begin" <[EMAIL PROTECTED]> 8/9/2007 8:24 AM >>>
Just a thought, you could try using the resultMap attribute of the
result tag.  Its implementation may be better for 0 or 1 cardinality.

<resultMaps>
  <resultMap id="CityResult" class="City">
    <result property="Id" column="CITY_ID"/>
    <result property="Name" column="city_name" />
     <result property="IsPolluted" column="city_is_polluted" />
   </resultMap>
   <resultMap id="PersonResult" class="Person">
    <!-- may need namespace in resultMap attribute below -->
    <result property="City" resultMap="CityResult" />
    <!-- others -->
  </resultMap>
</resultMaps>

This is just a guess, but would only take a minute to try (your SQL
should not change at all).  This approach is normally used with the
groupBy attribute to deal with N+1 avoidance, but there's no reason it
shouldn't work without it, and may actually solve the problem.

Here's hoping it doesn't expect the City property to be a collection.... ;-)

Cheers,
Clinton

On 8/8/07, Dustin Aleksiuk <[EMAIL PROTECTED]> wrote:
>
>
> Hi folks,
>
> The scenario (the example is just an example since our real objects have lots 
> of extra that gets in the way):
>
> 2 classes. Both complex types, one has a field typed as the other. ie.
>
> public class Person
> {
>     private City city;
>
>     <property for city here...>
> }
>
> To avoid the hit of a subselect in the iBatis map, we do an outer join on 
> Person and City. So our map looks like this:
>
> <resultMaps>
>     <resultMap id="Result" class="Person">
>
>       <result property="City.Id" column="CITY_ID"/>
>       <result property="City.Name" column="city_name" />
>       <result property="City.IsPolluted" column="city_is_polluted" />
>
>      <!-- ... other stuff removed -->
>
>     </resultMap>
>   </resultMaps>
>
> The question: Is there some kind of handler I can write so that if the 
> city_id column is null on the person table I can end up with a null city 
> field on my Person object? Or can we only handle this by using subselects?
>
> I tried using a type handler, but when it returns null, iBatis kindly creates 
> an instance of City so it can assign null to Id, Name and IsPolluted.
>
> Much thanks,
> Dustin Aleksiuk

Reply via email to