[ http://issues.apache.org/jira/browse/IBATIS-250?page=all ]
     
Sven Boden closed IBATIS-250:
-----------------------------

    Fix Version: 2.2.0
                     (was: 2.1.7)
     Resolution: Fixed
      Assign To: Sven Boden  (was: Clinton Begin)

Fix for JIRA IBATIS-250 checked in in SVN.

Files changed:
com.ibatis.sqlmap.engine.mapping.result.BasicResultMap
java\test\mapper\mapper2\test\com\ibatis\sqlmap\maps\RepeatingGroupMapping.xml
java\test\mapper\mapper2\test\com\ibatis\sqlmap\RepeatingGroupMappingTest.java

Impact:
Normally when using a groupby in a ResultMap and all values of a child object 
are empty no child object is created. 

Before this fix if you used a groupby in combination with a nullValue attribute 
an almost empty child object would be created in the normal case above (the 
nullValue attribute would clash with the check for null values). After the fix 
the behaviour of groupby/nullValue is the same as in the normal case: no child 
object is created if all its properties are null.

Tests:
- Verified by me
- Verified by 3rd party
- Added unit testcase and old testcases still work


> CLONE -SELECT statement returns unexpected result when 'groupBy' and 
> 'nullValue' are specified in resultMaps.
> -------------------------------------------------------------------------------------------------------------
>
>          Key: IBATIS-250
>          URL: http://issues.apache.org/jira/browse/IBATIS-250
>      Project: iBatis for Java
>         Type: Bug
>   Components: SQL Maps
>     Versions: 2.1.5
>  Environment: PowerMac G5 1.8GHz dual, 2.25GB RAM, Mac OS X 10.4.2
> Using SqlMaps from tomcat via spring framework.
>     Reporter: Iwao AVE!
>     Assignee: Sven Boden
>      Fix For: 2.2.0
>  Attachments: jira_250.zip
>
> [Preparation]
> -- Database
> CREATE TABLE parent ( parentId, parentName );
> CREATE TABLE child ( childId, parentId, childName, childAge );
> INSERT INTO parent ( parentId, parentName ) VALUES ( 1, 'Mr Parent' );
> -- Java classes.
> public class Parent
> {
>    private int parentId;
>    private String parentName;
>    private List childList;
>    // accessor methods...
> }
> public class Child
> {
>    private int childId;
>    private String childName;
>    private int childAge;
>    // accessor methods...
> }
> --SqlMap.
> <sqlMap namespace="Family">
>    <resultMap id="parentResult" class="Parent" groupBy="parentId">
>       <result property="parentId" column="parentId"/>
>       <result property="parentName" column="parentName"/>
>      <result property="childList" resultMap="Family.childResult"/>
>    </resultMap>
>    <resultMap id="childResult" class="Child">
>       <result property="childId" column="childId"/>
>       <result property="childName" column="childName"/>
>       <result property="childAge" column="childAge" nullValue="0"/>
>    </resultMap>
>    <select id="getParent" resultMap="parentResult" parameterClass="int">
>       SELECT
>          parent.parentId, parent.parentName,
>          child.childId, child.childName, child.childAge
>       FROM parent
>          LEFT JOIN child ON parent.parentId = child.parentId
>       WHERE
>          parent.parentId = #value#
>    </select>
> </sqlMap>
> --
> [Test]
> Executing statement "getParent" with parameter '1'.
> [Expected result]
> Query returns 1 'Parent' object and 'childList' property of it is empty 
> (doesn't mean null).
> [Actual result]
> The 'childList' property of the returned 'Parent' contains 1 'Child' object.
> [Additional information]
> If 'nullValue' is not specified in 'childResult', it works as expected.
> But this, of course, causes an error if there is a row in the 'child' table 
> and the 'childAge' column is null.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to