Hmmm...You can't cast a List to an array - so you must have meant something else - were you calling the toArray() method and saving the result as an array internally?
 
In my testing I've observed that iBATIS will call the setVotes method once with null, once again with an empty ArrayList.  Then it will repeatedly call getVotes for all the remaining votes rows.  Note that iBATIS does not compose the entire List and send it to the setVotes method at one time.  The initial list will be empty, then the getVotes method will be called repeatedly to add a Vote object one at a time.
 
You best hope for success is to have a private List of votes, and simple getters and setters.  Trying to do anything wierd in the setters and getters will cause unpredictable results - like you're seeing.
 
If you are still having trouble after making simple getters and setters, then please send your BasicStakeholder class along with your reply.
 
Jeff Butler
 
 

 
On 4/18/06, Eric Bauld <[EMAIL PROTECTED]> wrote:
setVotes was casting to an array. But when I added a if(votes ==
null){return;} for testing or removed all code in the method.
and left it as
setVotes(List votes){}

I would then get this ClassCastException(included below) if the setter
method for setVotes has code in it or not.


Its as if my resultMap for BasicVote is failing. As it would build the
stakeholder object when I removed the
<result property="votes" resultMap="Stakeholder.votes"/>
from the stakeMap resultMap. I cannot see a problem in my resultMap, I
have looked over it many times.

I am already using the BasicVote object in vote.xml(included below)  and
I can get votes from the DB just fine.
But its not working within stakeholder.xml

--------------Exception trace Follows:
com.ibatis.common.jdbc.exception.NestedSQLException :
--- The error occurred in config/maps/stakeholder.xml.
--- The error occurred while applying a result map.
--- Check the Stakeholder.stakeMap.
--- The error happened while setting a property on the result object.
--- Cause: java.lang.ClassCastException
Caused by: java.lang.ClassCastException
   at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:188)
   at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123)
   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.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:101)
   at
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:78)
   at
rp.broker.StakeholderBroker.getStakeholders(StakeholderBroker.java:81)
   at
test.rp.broker.TestStakeholderBroker.testGetStakeholders (TestStakeholderBroker.java:37)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at
sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:324)
   at junit.framework.TestCase.runTest(TestCase.java:154)
   at junit.framework.TestCase.runBare(TestCase.java:127)
   at junit.framework.TestResult$1.protect(TestResult.java:106)
   at junit.framework.TestResult.runProtected(TestResult.java:124)
   at junit.framework.TestResult.run(TestResult.java:109)
   at junit.framework.TestCase.run (TestCase.java:118)
   at junit.framework.TestSuite.runTest(TestSuite.java:208)
   at junit.framework.TestSuite.run(TestSuite.java:203)
   at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java :478)
   at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
   at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.lang.ClassCastException
   at
com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.setNestedResultMappingValue(BasicResultMap.java:383)
   at
com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.applyNestedResultMap(BasicResultMap.java :369)
   at
com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.setResultObjectValues(BasicResultMap.java:355)
   at
com.ibatis.sqlmap.engine.mapping.statement.RowHandlerCallback.handleResultObject(RowHandlerCallback.java :63)
   at
com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.java:395)
   at
com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:185)
   at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery (GeneralStatement.java:205)
   at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)
   ... 22 more

Caused by:
java.lang.ClassCastException
   at
com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.setNestedResultMappingValue(BasicResultMap.java:383)
   at
com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.applyNestedResultMap(BasicResultMap.java :369)
   at
com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.setResultObjectValues(BasicResultMap.java:355)
   at
com.ibatis.sqlmap.engine.mapping.statement.RowHandlerCallback.handleResultObject(RowHandlerCallback.java :63)
   at
com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.java:395)
   at
com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:185)
   at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery (GeneralStatement.java:205)
   at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)
   at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList (GeneralStatement.java:123)
   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.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:101)
   at
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:78)
   at
rp.broker.StakeholderBroker.getStakeholders (StakeholderBroker.java:81)
   at
test.rp.broker.TestStakeholderBroker.testGetStakeholders(TestStakeholderBroker.java:37)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at
sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)
   at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:324)
   at junit.framework.TestCase.runTest (TestCase.java:154)
   at junit.framework.TestCase.runBare(TestCase.java:127)
   at junit.framework.TestResult$1.protect(TestResult.java:106)
   at junit.framework.TestResult.runProtected(TestResult.java:124)
   at junit.framework.TestResult.run(TestResult.java:109)
   at junit.framework.TestCase.run(TestCase.java:118)
   at junit.framework.TestSuite.runTest(TestSuite.java:208)
   at junit.framework.TestSuite.run(TestSuite.java :203)
   at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
   at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
   at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:196)


---------Vote.xml-----------
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">

<sqlMap namespace="Vote">

   <select id="getVotes" resultClass=" rp.object.baseImpl.BasicVote">
       SELECT user_id AS userId,
           instance_id AS instanceId,
           requirement_id AS requirementId,
           criteria_id AS criteriaId,
           value AS voteValue
       FROM vote
       WHERE user_id = #userId#
       AND instance_id = #instanceId#
   </select>

   <insert id="insertVotes" parameterClass="rp.object.baseImpl.BasicVote">
       INSERT INTO vote
(user_id,instance_id,requirement_id,criteria_id,value)
       VALUES
(#userId#,#instanceId#,#requirementId#,#criteriaId#,#voteValue#)
       ON DUPLICATE KEY UPDATE value=#voteValue#;
   </insert>
</sqlMap>


Reply via email to