ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Collin Peters" <cadio...@gmail.com>
Subject Re: Is it possible to have an optional property in resultMap?
Date Thu, 15 Mar 2007 17:49:18 GMT
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