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