You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ibatis.apache.org by "Reto Welti (JIRA)" <ib...@incubator.apache.org> on 2008/07/03 09:52:45 UTC

[jira] Created: (IBATIS-521) groupby works only in top level result map

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.


[jira] Commented: (IBATIS-521) groupby works only in top level result map

Posted by "Kengkaj Sathianpantarit (JIRA)" <ib...@incubator.apache.org>.
    [ https://issues.apache.org/jira/browse/IBATIS-521?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12701450#action_12701450 ] 

Kengkaj Sathianpantarit commented on IBATIS-521:
------------------------------------------------

I'm not sure if this is a bug. You don't specify groupBy in searchPersonResultMap so iBATIS maps all records into list of mydomain.grpart.test.groupby.SearchResult, grouping in personResultMap is too late.
Specifying groupBy in a resultMap should mean group that resultMap by a specified property, doesn't it?

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