[
http://issues.apache.org/jira/browse/IBATIS-148?page=comments#action_12314920 ]
Manfred Klug commented on IBATIS-148:
-------------------------------------
Brandon,
a small variation of your test reveals the problem.
the java code:
public void testIterateNestedListPropertyC() throws SQLException {
Account account = new Account();
account.setFirstName("Clinton");
Account newAccount = new Account();
newAccount.setLastName ("Jones");
account.setAccountList(new ArrayList());
account.getAccountList().add(newAccount);
List list = sqlMap.queryForList("iterateNestedListPropertyC", account);
// assertAccount1((Account) list.get(0));
// assertEquals(3, list.size());
}
the mapped statement code:
<select id="iterateNestedListPropertyC"
parameterClass="testdomain.Account"
resultClass="testdomain.Account">
select
ACC_ID as id,
ACC_FIRST_NAME as firstName,
ACC_LAST_NAME as lastName,
ACC_EMAIL as emailAddress
from ACCOUNT
<iterate open="WHERE" close="" conjunction="OR" property="accountList">
ACC_LAST_NAME = #accountList[].lastName#
<isNotEqual prepend="OR" compareProperty="firstName"
compareValue="test">
ACC_FIRST_NAME = #firstName#
</isNotEqual>
</iterate>
</select>
the final sql statement is:
select ACC_ID as id, ACC_FIRST_NAME as firstName, ACC_LAST_NAME as
lastName, ACC_EMAIL as emailAddress from ACCOUNT WHERE ACC_LAST_NAME = ? OR
ACC_FIRST_NAME = ?
the passed in parameters are:
[0] = Clinton
[1] = Jones
and this is the problem. The correct parameters should be:
[0] = Jones
[1] = Clinton
> Capability to use dynamic sql within iterates
> ---------------------------------------------
>
> Key: IBATIS-148
> URL: http://issues.apache.org/jira/browse/IBATIS-148
> Project: iBatis for Java
> Type: Improvement
> Components: SQL Maps
> Versions: 2.0.9b, 2.1.0
> Reporter: Sam Abeyratne
> Assignee: Brandon Goodin
>
> I am getting the following error when I try to run a simple query that has a
> dynamic <isNotEqual> within an iterate tag. Per Brandon, this is a known
> issue that needs to be fixed.
> Thanks!
> Sam
> 2005-06-06 17:11:25,284 [HttpRequestHandler-2083] DEBUG xxxDAO.class -
> Parameters: {sidList=[abc1, abc2], carrier=ABCDE1, interfaceType=DSP}
> 2005-06-06 17:11:25,284 [HttpRequestHandler-2083] DEBUG xxxDAO.class -
> Calling queryForList with statementName: queryInterfaceErrorCount and
> parameters: {sidList=[abc1, abc2], carrier= ABCDE1, interfaceType=DSP}
> 2005-06-06 17:11:25,294 [HttpRequestHandler-2083] ERROR
> xxxDispatchAction.class - Entered catch block in viewErrorLog: Exception in
> queryInterfaceErrorCount: com.ibatis.common.beans.ProbeException: Error
> getting ordinal list from JavaBean. Cause java.lang.NumberFormatException:
> For input string: "" Caused by: java.lang.NumberFormatException: For input
> string: ""
> The sqlmap looks something like:
> <select id="queryInterfaceErrorCount" parameterClass="java.util.Map"
> resultMap="interface_error_count_result"
> cacheModel="interface_error_count_cache">
> select sum(count) as count
> from
> (
> <iterate property="sidList" open="(" close=")" conjunction="UNION ALL">
> select count(*) as count
> from [EMAIL PROTECTED]
> where interface_type = #interfaceType#
> <isNotEqual prepend="and" property="carrier" compareValue="All">
> carrier_name = #carrier#
> </isNotEqual>
> </iterate>
> )
> </select>
>
> Java bean looks like:
> public class InterfaceErrorCount {
> private int count;
> public int getCount() {
> return count;
> }
> public void setCount(int count) {
> this.count = count;
> }
> }
--
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