[ 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