[ http://issues.apache.org/jira/browse/IBATIS-250?page=all ]
Iwao AVE! updated IBATIS-250: ----------------------------- Attachment: BasicResultMap.java Thanks Sven and Clinton. But with version 2.1.7, the query 'getParent' still returns one Child object in the childList property of the Parent object. Let me explain the problem further. The query 'getParent' returns one row which contains the following data [1, 'Mr. Parent', null, null, null ]. In this case, we need one Parent object but no Child object because there are no rows in the Child table. And this is the behavior when the nullValue attribute is not specified in the 'childResult' resultMap. Thanks to Sven's attachment, I could find which part of the file I should modify. I have attached the modfied BasicResultMap.java (patched againsed the current latest svn version : revision 357473). I added a method named isValueFound() to detect whether the 'nullValue' is used or not. -- And one more thing. The method doNullMapping() seemed to do exactly the same thing as the getPrimitiveResultMappingValue() method does. Sorry for my late response. > 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: Clinton Begin > Fix For: 2.1.7 > Attachments: BasicResultMap.java > > [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