[ http://issues.apache.org/jira/browse/IBATIS-274?page=comments#action_12369247 ]
Tim Haley commented on IBATIS-274: ---------------------------------- I left out of the Environment section: Oracle 9i using the 10g driver. > queryForPaginatedList doesn't play well with groupBy attribute of resultMap > (N+1 selects solution) > --------------------------------------------------------------------------------------------------- > > Key: IBATIS-274 > URL: http://issues.apache.org/jira/browse/IBATIS-274 > Project: iBatis for Java > Type: Bug > Components: SQL Maps > Versions: 2.1.7 > Environment: WinXP Pro, WebLogic 8.1, JDK 1.4.2_05, Spring 1.2.7 > Reporter: Tim Haley > > I have implemented the N+1 solution using the groupBy attribute of the > resultMap. > When this is called using queryForList() it works as expected; I get two > BatchResults objects, the first contains a list of 20 ProcessingResult > objects and the second contains a list of 19 ProcessingResult objects. > When called with queryForPaginatedList() and a page size of 10, I only get > the first BatchResults object, which does contain the list of 20 > ProcessingResult objects. > When called with queryForPaginatedList() and a page size of 19, I only get > both BatchResults objects, the first contains a list of 20 ProcessingResult > objects and the second contains a list of 18 ProcessingResult objects. (total > of 38, 2x the page size) > When called with queryForPaginatedList() and a page size of 18, I only get > both BatchResults objects, the first contains a list of 20 ProcessingResult > objects and the second contains a list of 16 ProcessingResult objects. (total > of 36, 2x the page size) > When called with queryForPaginatedList() and a page size of 17, I only get > both BatchResults objects, the first contains a list of 20 ProcessingResult > objects and the second contains a list of 14 ProcessingResult objects. (total > of 34, 2x the page size) > See details of mapping and method calls below: > <resultMap id="BatchResultMap" class="BatchResult" > groupBy="processingSchedule.processingKey"> > <result property="processingSchedule.processingKey" > column="PROCESSING_KEY" javaType="int"/> > <result property="processingSchedule.processingDate" > column="PROCESS_DATE" javaType="date"/> > <result property="processingSchedule.printDate" column="PRINT_DATE" > javaType="date"/> > <result property="processingSchedule.processType.processTypeKey" > column="PROCESS_TYPE_KEY" javaType="int"/> > <result property="processingSchedule.processType.description" > column="PROCESS_TYPE_DESCRIPTION" javaType="string"/> > <result property="processingResults" > resultMap="Processing.ProcessResultMap"/> > </resultMap> > <resultMap id="ProcessResultMap" class="ProcessingResult"> > <!--<result property="processingKey" column="PR_PROCESSING_KEY"/>--> > <result property="applicationKey" column="APPLICATION_KEY" > javaType="int"/> > <result property="applicationStatusKey" > column="APPLICATION_STATUS_KEY" javaType="int"/> > <result property="applicationStatusString" > column="APPLICATION_STATUS_DESCRIPTION" javaType="string"/> > <result property="testResults" > column="{applicationKey=APPLICATION_KEY, processingKey=PR_PROCESSING_KEY}" > select="getTestResultsForProcessingResult"/> > <result property="application" column="APPLICATION_KEY" javaType="int" > select="loadApplicationByPrimaryKey"/> > <result property="processing" column="PR_PROCESSING_KEY" > javaType="int" > select="loadProcessingSchedule"/> > </resultMap> > <select id="loadBatchResultsForDateRange" parameterClass="DateRange" > resultMap="BatchResultMap"> > select > PRO.PROCESSING_KEY, > PRO.PROCESS_DATE, > PRO.PRINT_DATE, > PRO.PROCESS_TYPE_KEY, > PT.DESCRIPTION as PROCESS_TYPE_DESCRIPTION, > PR.APPLICATION_KEY, > ASCD.APPLICATION_STATUS_KEY, > ASCD.DESCRIPTION as APPLICATION_STATUS_DESCRIPTION, > PR.PROCESSING_KEY as PR_PROCESSING_KEY > from > WM.USTP_PROCESSING PRO > join WM.USTP_PROCESS_TYPE_CD PT on PRO.PROCESS_TYPE_KEY = > PT.PROCESS_TYPE_KEY > left outer join WM.USTP_PROCESSING_RESULT PR on PR.PROCESSING_KEY > = PRO.PROCESSING_KEY > left outer join WM.USTP_APPLICATION_STATUS_CD ASCD on > ASCD.APPLICATION_STATUS_KEY = PR.APPLICATION_STATUS_KEY > where > PRO.PROCESS_DATE between #start# and (#end# + 1) > order by > PRO.PROCESSING_KEY desc > </select> > public List loadByProcessingDateRange(DateRange aDateRange) > throws DataAccessException > { > return > getSqlMapClientTemplate().queryForList("loadBatchResultsForDateRange", > aDateRange); > } > public PaginatedList loadByProcessingDateRange(DateRange aDateRange, > int aPageSize) > throws DataAccessException > { > return > getSqlMapClientTemplate().queryForPaginatedList("loadBatchResultsForDateRange", > aDateRange, > aPageSize); > } -- 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