..or you could use a rowhandler. Larry
On 2/19/07, Jeff Butler <[EMAIL PROTECTED]> wrote:
iBATIS groupBy support does not support two independant lists. This would be a very difficult problem to solve and would require us to deal with object identity - which we don't deal with now. So with groupBy, you can have one and only one list that is automatically populated. Other lists will need to be populated with a nested select. Jeff Butler On 2/19/07, [EMAIL PROTECTED] < [EMAIL PROTECTED] > wrote: > > > Greetings Claudio, > > We too have this problem with the latest two releases. If you use > version 2.1.7.597 you should have no problems - hopefully you have not > implemented any new features like we had (and had to scramble to undo). > Versions 2.2 and 2.3 will not handle what you are trying to do. I have > been so swamped that I have been unable to generate a test case and submit a > bug report. Maybe your example will suffice. > > Regards, > Tim Hammar > > > > > *"Claudio Iacovozzi" <[EMAIL PROTECTED] >* > > 02/19/2007 06:51 AM Please respond to > [email protected] > > To > [email protected] cc > > Subject > Problem with several one to many relationships in breadth > > > > > > > > We have a problem filling objects with several '1 to many > relationships' in breadth from one single SQL statement. > > On page 40 of the iBatis Data Mapper Developer Guide the 'groupBy' > construct is described as follows: > "Using this approach, you can solve any N+1 problem of any depth or > breadth." > > This just seems to work for any depth but NOT for any *breadth*. > > Example: > > An insurance agent contains a list of customers as well as a list of > insured events. > > <resultMap class="agent" id="agent" groupBy="id" > > <result property="id" column="agentId" /> > <result property="firstName" column="agent_firstname" /> > <result property="lastName" column="agent_lastname" /> > <result property="events" resultMap="event" /> > <result property="customers" resultMap="customer" /> > </resultMap> > > <resultMap class="event" id="event" groupBy="id" > > <result property="id" column="eventId" /> > <result property="title" column="title" /> > </resultMap> > > <resultMap class="customer" id="customer" groupBy="id" > > <result property="id" column="customerId" /> > <result property="firstName" column="customer_firstname" /> > <result property="lastName" column="customer_lastname" /> > <result property="street" column="street" /> > <result property="city" column="city" /> > </resultMap> > > - The used SQL statement: > > <select id="getAgent" resultMap="agent" parameterClass="int"> > SELECT a.agentId, a.FirstName as agent_firstname, a.LastName as > agent_lastname, b.eventId, b.title, > c.customerId, c.FirstName as customer_firstname, c.LastName as > customer_lastname, c.street, c.city > > FROM insurance_agent a, agenteventlink ab, insured_event b, customer c > WHERE a.agentId = ab.agentId > AND ab.eventId = b.eventId > AND b.customerId = c.customerId > AND a.agentId = #id# > > ORDER BY a.agentId, c.customerId > </select> > > - The returned result set: > agentId,agent_firstname,agent_lastname,eventId,title,customerId,customer_firstname,customer_lastname > > > {1,Agent1,Smith,1,housebreaking,1,Customer1,Johnson} > {1,Agent1,Smith,4,theft,1,Customer1,Johnson} > {1,Agent1,Smith,2,damage,3,Customer2,Miller} > > > What we would like to achieve is getting a bean of type Agent, which > contains two lists of all its customers and all its associated > insured events: > > Agent1 --> List<Customer> {1:Customer1, 3:Customer2} > --> List<Event> {1:housebreaking, 2:damage, 4:theft} > > > But iBatis creates a bean like this: > Agent1 --> List<Customer> {1: Customer1, 1:Customer1, 3: Customer2} > --> List<Event> {1:housebreaking, 2:damage, 4:theft} > > > We want to avoid several SQL statements to get the necessary data (one > to get all events, and one to get all customers). > > Any solution ? > >
