groupby works only in top level result map
------------------------------------------

                 Key: IBATIS-521
                 URL: https://issues.apache.org/jira/browse/IBATIS-521
             Project: iBatis for Java
          Issue Type: Bug
          Components: SQL Maps
    Affects Versions: 2.3.2
         Environment: JRE 1.5.0_12 on Windows 2000
            Reporter: Reto Welti


It seems to be that a groupby must be defined on the top level resultmap, 
because I've got the following problem:

For this example I have store some search results in a table and would like to 
load these search results to my java program. The table looks like this:

MATCH   NAME                    FIRSTNAME               INTERNATIONALAREACODE   
NETWORKGROUP    PHONENUMBER                   
---------------------------------------------------------------------------------------------------------------------------------------------
 ------------------------------
100             Meier                   Hans                    41              
                                        44                                      
710 05 05
100             Senderos                Mark                    41              
                                        78                                      
745 45 45
83              Eichenberger    Heinrich                        41              
                                        41                                      
745 45 65
83              Eichenberger    Heinrich                        41              
                                        79                                      
505 12 46
75              Müller                  Franz                   41              
                                        58                                      
712 13 15

My beans looks like this:

public class SearchResult {
    /** agreement of the search parameters (in percentage) */
    private Integer match;

    /** located person */
    private Person person;
(...)
}

public class Person {
    private String name;

    private String firstName;

    private List<PhoneNumber> phoneNumbers;
(...)
}

public class PhoneNumber {
    /** regional prefix or network group */
    private Integer networkGroup;

    /** country prefix for international connections */
    private Integer internationalAreaCode;

    /** phone number */
    private String phoneNumber;
(...)
}

Here is the sql statement I would like to access the data and the related 
result maps:
        <select id="searchPerson" resultMap="searchPersonResultMap">
                select          match, name, firstname, internationalareacode,
                                networkgroup, phonenumber
                from            mysearchresults
                order by        match desc
        </select>

        <resultMap id="searchPersonResultMap" 
class="mydomain.grpart.test.groupby.SearchResult">
                <result property="match" column="match"/>
                <result property="person" resultMap="Test.personResultMap"/>
        </resultMap>
        
        <resultMap id="personResultMap" 
class="mydomain.grpart.test.groupby.Person" groupBy="name">
                <result property="name" column="name"/>
                <result property="firstName" column="firstname"/>
                <result property="phoneNumbers" 
resultMap="Test.phoneNumbersResultMap"/>
        </resultMap>
        
        <resultMap id="phoneNumbersResultMap" 
class="mydomain.grpart.test.groupby.PhoneNumber">
                <result property="internationalAreaCode" 
column="internationalareacode"/>
                <result property="networkGroup" column="networkgroup"/>
                <result property="phoneNumber" column="phonenumber"/>
        </resultMap>

Now I access the data in my program and print out the objects. This is my 
output:
--------------------------------------------------------------------
Match: 100%
Name: Meier     Firstname: Hans
Number of Phones: 1
--------------------------------------------------------------------
Match: 100%
Name: Senderos  Firstname: Mark
Number of Phones: 1
--------------------------------------------------------------------
Match: 83%
Name: Eichenberger      Firstname: Heinrich
Number of Phones: 2
--------------------------------------------------------------------
Match: 83%
person is null!!!
--------------------------------------------------------------------
Match: 75%
Name: Müller    Firstname: Franz
Number of Phones: 1
--------------------------------------------------------------------

You see, that the third result was correct filled, Mr. Eichenberger has two 
phone numbers. But the fourth result has a match, but no person. This entry is 
needless.

If I am getting only a person out of this table with the same result maps, 
everthing works correct. This is my statement:
<select id="getPerson" resultMap="personResultMap">
                select          match, name, firstname, internationalareacode,
                                networkgroup, phonenumber
                from            mysearchresults
                where           name = #name#
        </select>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to