ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jeff Butler" <jeffgbut...@gmail.com>
Subject Re: Is it possible to have an optional property in resultMap?
Date Thu, 15 Mar 2007 20:52:57 GMT
You could do two things:

1. Hava a BaseUserVO and FullUserVO that extends BaseUserVO.  Write seperate
result maps and use as appropriate

2. Have UserVO as now, but write two different resultMaps - a base resultMap
and a full resultMap that extends the base resultMap.  Then specify the
appropriate resultMap on the different queries.

I've done both at different times, but sounds like #2 is more appropriate in
your situation.

iBATIS does not support optional attributes now.

Jeff Butler



On 3/15/07, Collin Peters <cadiolis@gmail.com> wrote:
>
> The whole point is that I don't want to include the extra SQL fields
> at all, and still only have one resultMap class.
>
> In my entire application I only want to ever have one class that
> represents a user (called UserVO).  So I would have a sqlmap called
> getUser where I pass in an ID and get *all* the details for that user.
> Then I have another sqlmap called getAppointments which gets a bunch
> of appointments, and all the participants in each appointment.  For
> the participants, they can be stored in a UserVO, but I don't want to
> retrieve their password and other extraneous fields that aren't
> important to being a participant in an appointment.
>
> Currently in iBatis when I specify the participants of an appointment like
> this:
>        <resultMap id="eventResult" class="EventVO" groupBy="eventID">
>                <result property="eventID" column="event_id" />
>                <result property="summary" column="summary" />
> <snip....>
>                <result property="participants" resultMap="userResult" />
>        </resultMap>
>        <resultMap id="userResult" class="UserVO" >
>                <result property="userID" column="user_id"/>
>                <result property="password" column="password"/>
> <snip...>
>        </resultMap>
>
> iBatis will error because I am not including the password in the SQL
> to get the appointments.  So my options I see so far are:
> - include the extra user fields in the SQL
> - create a new object class called ParticipantUserVO without the extra
> fields
> - any others?
>
> What I was hoping is there was some way to specify a property in a
> resultMap as optional.  So that when constructing the object if it
> failed to find that column it would simply set it as null and continue
> on its merry way instead of failing.  Am I making sense?
>
> On 3/15/07, Larry Meadors <lmeadors@apache.org> wrote:
> > You could use dynamic SQL to do that, just make the password '' in the
> > cases you don't want it.
> >
> > <select...>
> > select ...
> > <isEqual property="showPassword" compareValue="true">password</isEqual>
> > <isEqual property="showPassword" compareValue="false">'' as
> password</isEqual>
> > ...
> > </select>
> >
> > Larry
> >
> >
> > On 3/15/07, Collin Peters <cadiolis@gmail.com> wrote:
> > > Hi everyone,
> > >
> > > I'm just wondering if it is possible to have an optional property in a
> > > resultMap?  For example, I have a UserVO class which I use to load
> > > users into.  It has fields such as user_id, username, firstname,
> > > lastname, password, etc...  I also want to use this class as a
> > > 'sub'-resultMap from another call.  For example, I have a call called
> > > loadDailySchedule, in this call I grab all events in a schedule, along
> > > with all the participants, and group by the event_id.  So the sqlmap
> > > is:
> > >
> > >         <resultMap id="eventResult" class="EventVO" groupBy="eventID">
> > >                 <result property="eventID" column="event_id" />
> > >                 <result property="summary" column="summary" />
> > > <snip...>
> > >                 <result property="participants" resultMap="
> common.userResult" />
> > >         </resultMap>
> > >
> > > The problem is that I don't want to have to include fields like the
> > > users password in this query as it is not needed.  If I want to use
> > > the common.userResult resultMap (which uses the UserVO class) though,
> > > I need to include those fields otherwise I get the error: "The column
> > > name password was not found in this ResultSet"
> > >
> > > Regards,
> > > Collin
> > >
> >
>

Mime
View raw message