[ http://issues.apache.org/jira/browse/IBATIS-354?page=comments#action_12440638 ] sam zheng commented on IBATIS-354: ----------------------------------
Oh yes it works,and thanks. Ibatis have been improved more from 1.x that I had used. Maybe I should go deeper in the doc,I found this mentioned in the latest iBATIS-SqlMaps-2.pdf. > Bug when resultClass is a map in dynamic statement > -------------------------------------------------- > > Key: IBATIS-354 > URL: http://issues.apache.org/jira/browse/IBATIS-354 > Project: iBatis for Java > Issue Type: Bug > Components: SQL Maps > Affects Versions: 2.1.7, 2.2.0 > Environment: SUN JDK 1.4.2_10 > Tomcat 5.0.28 > MySQL 5.x > Reporter: sam zheng > > When I want to return a map(HashMap) to temply get a summary result,I catch > a bug. > I change my ibatis from 2.1.7 to 2.2.0,the bug is still there. > I debug it in 2.2.0 with src and found the code seems to reuse the > resultMappings though the allowRemapping is false. > --------> > public ResultMapping[] getResultMappings() { > if (allowRemapping) { > return (ResultMapping[]) remappableResultMappings.get(); > } else { > return resultMappings; > } > } > So when I change my dynamic statement from DAY(summaryType=DAY) to > MONTH(summaryType=MONTH),the column 'c_day' is not exits now,and then in > ObjectTypeHandler class,the getResult method want to invoke > rs.getObject(columnName),execption throw. > ---------> > public Object getResult(ResultSet rs, String columnName) > throws SQLException { > Object object = rs.getObject(columnName); > if (rs.wasNull()) { > return null; > } else { > return object; > } > } > Exception is : > -------------------> > org.apache.jasper.JasperException: Failed to queryForList - id [summary], > parameterObject [{summaryFor=MEMBER, dateFrom=2006-9-06, summaryType=MONTH, > dateTo=2006-10-06}]. Cause: > com.ibatis.common.jdbc.exception.NestedSQLException: > --- The error occurred in com/tuanzi/persistence/sql/Summary.xml. > --- The error occurred while applying a result map. > --- Check the summary-AutoResultMap. > --- Check the result mapping for the 'c_day' property. > --- Cause: java.sql.SQLException: Column 'c_day' not found. > Caused by: java.sql.SQLException: Column 'c_day' not found. > > org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372) > org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) > org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) > javax.servlet.http.HttpServlet.service(HttpServlet.java:802) > > com.tuanzi.presentation.base.AccessFilter.doFilterInternal(AccessFilter.java:64) > > com.tuanzi.presentation.base.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:59) > > com.tuanzi.presentation.base.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:44) > > com.tuanzi.presentation.base.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:59) > My sqlmap config file is : > --------------------> > <select id="summary" resultClass="java.util.HashMap" > parameterClass="java.util.Map"> > <dynamic> > <isEqual property="summaryType" compareValue="DAY"> > SELECT c_year,c_month,c_day, > </isEqual> > <isEqual property="summaryType" compareValue="MONTH"> > SELECT c_year,c_month, > </isEqual> > <isEqual property="summaryType" compareValue="YEAR"> > SELECT c_year, > </isEqual> > </dynamic> > sum(c_member_num) as c_member_num, > sum(c_group_num) as c_group_num, > sum(c_tip_num) as c_tip_num, > sum(c_forwar_num) as c_forwar_num > FROM > ( > SELECT > year(c_registertime) as c_year, > month(c_registertime) as c_month, > day(c_registertime) as c_day, > count(*) as c_member_num, > 0 as c_group_num, > 0 as c_tip_num, > 0 as c_forwar_num > FROM t_memberinfo > GROUP BY c_year,c_month,c_day > ) as t > <dynamic> > <isEqual property="summaryType" compareValue="DAY"> > <![CDATA[ > WHERE > ( > c_year>year(#dateFrom#) > OR > c_year=year(#dateFrom#) AND c_month>month(#dateFrom#) > OR > c_year=year(#dateFrom#) AND c_month=month(#dateFrom#) AND > c_day>=day(#dateFrom#) > ) > AND > ( > c_year<year(#dateTo#) > OR > c_year=year(#dateTo#) AND c_month<month(#dateTo#) > OR > c_year=year(#dateTo#) AND c_month=month(#dateTo#) AND > c_day<=day(#dateTo#) > ) > GROUP BY c_year,c_month,c_day > ORDER BY c_year,c_month,c_day > ]]> > </isEqual> > <isEqual property="summaryType" compareValue="MONTH"> > <![CDATA[ > WHERE > ( > c_year>year(#dateFrom#) > OR > c_year=year(#dateFrom#) AND c_month>=month(#dateFrom#) > ) > AND > ( > c_year<year(#dateTo#) > OR > c_year=year(#dateTo#) AND c_month<=month(#dateTo#) > ) > GROUP BY c_year,c_month > ORDER BY c_year,c_month > ]]> > </isEqual> > <isEqual property="summaryType" compareValue="YEAR"> > <![CDATA[ > WHERE > ( > c_year>=year(#dateFrom#) > ) > AND > ( > c_year<=year(#dateTo#) > ) > GROUP BY c_year > ORDER BY c_year > ]]> > </isEqual> > </dynamic> > </select> -- 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