[ 
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

        

Reply via email to