Hi Paul, Did you try putting session_id IN #value[]# inside iterate tag?
Cheers, Daniel Silva. On 6/9/05, Paul Barry <[EMAIL PROTECTED]> wrote: > I am using iBatis 2.1.0.565 with JDK 1.5.0. I am trying to pass a > List to a sqlmap and then use it to generate a list of comma-separated > values for the IN clause of a query, like this: > > <resultMap id="counts" class="map"> > <result property="id" column="id" javaType="long"/> > <result property="count" column="count" javaType="int"/> > </resultMap> > > <select id="findCountsBySession" parameterClass="list" resultMap="counts"> > SELECT > session_id as id, count(*) count > FROM > events > <dynamic prepend="WHERE"> > <iterate property="value" open="(" close=")" conjunction=","> > </iterate> > session_id IN #value[]# > </dynamic> > GROUP BY > session_id > </select> > > The query I would like to end up with is: > > SELECT > session_id, count(*) count > FROM > events > WHERE > session_id IN (1,2,3) > GROUP BY > session_id > > But instead I get an exception. Can you not use #value[]#? Here is > the exception: > > java.lang.StringIndexOutOfBoundsException: String index out of range: -2 > at java.lang.String.substring(String.java:1768) > at > com.ibatis.common.beans.GenericProbe.getObject(GenericProbe.java:55) > at > com.ibatis.sqlmap.engine.mapping.sql.dynamic.elements.IterateTagHandler.doStartFragment(IterateTagHandler.java:34) > at > com.ibatis.sqlmap.engine.mapping.sql.dynamic.DynamicSql.processBodyChildren(DynamicSql.java:129) > at > com.ibatis.sqlmap.engine.mapping.sql.dynamic.DynamicSql.processBodyChildren(DynamicSql.java:132) > at > com.ibatis.sqlmap.engine.mapping.sql.dynamic.DynamicSql.processBodyChildren(DynamicSql.java:99) > at > com.ibatis.sqlmap.engine.mapping.sql.dynamic.DynamicSql.process(DynamicSql.java:79) > at > com.ibatis.sqlmap.engine.mapping.sql.dynamic.DynamicSql.getParameterMap(DynamicSql.java:61) > at > com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:152) > at > com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:119) > at > com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:610) > at > com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:584) > at > com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForMap(SqlMapExecutorDelegate.java:700) > at > com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForMap(SqlMapSessionImpl.java:121) > at > com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForMap(SqlMapClientImpl.java:93) >