Oops. I did move it inside the iterate tag where it belongs, but that
didn't fix my problem, still same exception as before.
On 6/9/05, Daniel Henrique Ferreira e Silva <[EMAIL PROTECTED]> wrote:
> 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)
> >
>