Details
Description
[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.
Attachments
Attachments
Issue Links
- is a clone of
-
IBATIS-213 SELECT statement returns unexpected result when 'groupBy' and 'nullValue' are specified in resultMaps.
- Closed