Map data into HashMaps: HashMap of List of HashMaps
---------------------------------------------------

         Key: IBATIS-265
         URL: http://issues.apache.org/jira/browse/IBATIS-265
     Project: iBatis for Java
        Type: Improvement
    Reporter: Stefan Friedrich
    Priority: Minor


We tried to implement the HashMaps as results for our queries. The problem is, 
that whenever a HashMap is set as the resultClass, a queryForObject is called 
and so, every select can only return ONE result. In our application we expect a 
list of HashMaps at certain locations. The solution for our problem would be 
very simple and - in our opinion - would work with only three new lines of code:


The Method BasicResultMap.getResults(RequestScope request, ResultSet rs) the 
targetType for further calls is set: 


if (resultClass == null) { 
        throw new SqlMapException("The result class was null when trying to get 
results for ResultMap named " + getId() + ".");
} else if (Map.class.isAssignableFrom(resultClass)) { 
        columnValues[i] = getNestedSelectMappingValue(request, rs, mapping, 
Object.class); 
} else if (DomTypeMarker.class.isAssignableFrom(resultClass)) { 
        Class javaType = mapping.getJavaType(); 
        if (javaType == null) { 
                javaType = DomTypeMarker.class; 
        } 
        columnValues[i] = getNestedSelectMappingValue(request, rs, mapping, 
javaType); 
} else { 
        Probe p = ProbeFactory.getProbe(resultClass); 
        Class type = p.getPropertyTypeForSetter(resultClass, 
mapping.getPropertyName()); 
        columnValues[i] = getNestedSelectMappingValue(request, rs, mapping, 
type); 
}


The part that needs to be changed is in the first "else-Statement".


if (resultClass == null) { 
        throw new SqlMapException("The result class was null when trying to get 
results for ResultMap named " + getId() + ".");
} else if (Map.class.isAssignableFrom(resultClass)) { 
        Class javaType = mapping.getJavaType(); 
        if (javaType == null) { 
                javaType = Object.class; 
        } 
        columnValues[i] = getNestedSelectMappingValue(request, rs, mapping, 
javaType); 
} else if (DomTypeMarker.class.isAssignableFrom(resultClass)) { 
        Class javaType = mapping.getJavaType(); 
        if (javaType == null) { 
                javaType = DomTypeMarker.class; 
        } 
        columnValues[i] = getNestedSelectMappingValue(request, rs, mapping, 
javaType); 
} else { 
        Probe p = ProbeFactory.getProbe(resultClass); 
        Class type = p.getPropertyTypeForSetter(resultClass, 
mapping.getPropertyName()); 
        columnValues[i] = getNestedSelectMappingValue(request, rs, mapping, 
type); 
}

As you can see, the changes would have no effect, if no javaType was set. But 
for our concerns, we would set the javaType to java.util.ArrayList and 
everything would be just fine!


Stefan


-- 
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