ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Viv Kapadekar <vi...@peoplepowerco.com>
Subject Re: [IBatis3-beta10] nested results for collection
Date Wed, 07 Apr 2010 18:31:00 GMT
Hi Clinton

Basically what I am seeing is the nested select is not getting  
executed. To make it simpler, I created a simple prototype.  I know in  
this example I don't need to create a separate select, but wondering  
why its not working. Here are the details

POJOs
public class Car
{
	private int carId ;
	private String name ;
	
	private List<Parts> carParts ;
}

public class Parts
{
	private int partId;
	private String name ;
}

==============
Mapper

	<resultMap id="carResult" type="Car">
		<id property="carId" column="id"/>		
		 <result  property="name" column="name"/>
		 <collection property="carParts" javaType="ArrayList" ofType="Parts"  
select="getCarPartInfo"/>
	</resultMap>
	
	<select id="getCarsInfo" resultMap="carResult">
		SELECT car_id as "id", name
		FROM Car where car_id=1
	</select>
	
	<select id="getCarPartInfo" resultType="Parts">
		SELECT part_id as "partId", name
		FROM Parts where car_id=1
	</select>
==========
Tables
======

mysql> select * from car;
+--------+------+
| car_id | name |
+--------+------+
|      1 | Audi |
+--------+------+
1 row in set (0.00 sec)


mysql> select * from Parts;
+---------+------------+--------+
| part_id | name       | car_id |
+---------+------------+--------+
|     100 | door       |      1 |
|     101 | windshield |      1 |
|     102 | Brakes     |      1 |
+---------+------------+--------+
3 rows in set (0.00 sec)


=========================
Unit Test

	public void testGetCarInfo() {
		List<Car> list = repository.getCarsInfo();
		for (Iterator<Car> carIter = list.iterator();carIter.hasNext();) {
			Car d = carIter.next();
			logger.debug("Car id " + d.getCarId() + " name " + d.getName());
			List<Parts> dPartList = d.getCarParts();
			if (dPartList!=null) {
				logger.debug(" car Part iterator is not null " +  
dPartList.size());					
			} else {
				logger.debug(" car Part List is  null " );
			}
			
		}
		
		assertNotNull("At least one device must exist", list);	
	}


Unit Test Result

2010-04-07 11:27:11,576 DEBUG [iBatisImplTest] Car id 1 name Audi
2010-04-07 11:27:11,577 DEBUG [iBatisImplTest]  car Part List is  null


As you can see the result does not contain the Parts List, the  
Collection is not getting set. What is missing?

-V




On Apr 6, 2010, at 8:49 PM, Clinton Begin wrote:

> So you have desc in two places?  This is getting more confusing.   
> Maybe post the expected result set and the classes you're mapping it  
> to.
>
> Clinton
>
> On Tue, Apr 6, 2010 at 9:09 PM, Viv Kapadekar  
> <vivek@peoplepowerco.com> wrote:
> Yeah actually to make it more clear Class X also has desc. So its  
> really:
> Class X {
> String id
> String desc
> List<Y> b
> }
> If index is null the desc is applicable for X and when its not null  
> it should be applicable to X.
>
> --V
>
> On Apr 6, 2010, at 7:21 PM, Clinton Begin wrote:
>
>> If iBATIS finds ANY values for the mapped properties, it will  
>> create the object.  Is it possible that the desc column is  
>> populated even when the index is null?
>>
>> On Tue, Apr 6, 2010 at 7:52 PM, Viv Kapadekar <vivek@peoplepowerco.com 
>> > wrote:
>> Hi
>> I have a Class X containing a List of Class Y
>>
>> Class X {
>> String a
>> List<Y> b
>> }
>>
>> Class Y {
>> String index
>> String desc
>> }
>>
>> The resultMap I have is
>>
>> <resultMap id="someID" type="X">
>>                <id property="a" column="id"/>
>>                        <collection property="b" ofType="Y">
>>                                      <id property="index"  
>> column="index" />
>>                                        <result property="desc"  
>> column="desc"/>  -->
>>                        </collection>
>> </resultMap>
>>
>> This is fine, but I don't want the resulting X to have the  
>> collection b set, if the "index" value is null. If index is null,  
>> even the value of b in X should be null.  I tried using  
>> <discriminator> and also tried creating a separate sql, but no  
>> luck. Any ideas?
>>
>> -V
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
>> For additional commands, e-mail: user-java-help@ibatis.apache.org
>>
>>
>
> ---------------------------------------------------------------
> Viv Kapadekar
> vivek@peoplepowerco.com
>
>

---------------------------------------------------------------
Viv Kapadekar
vivek@peoplepowerco.com


Mime
View raw message