[ 
https://issues.apache.org/jira/browse/IBATIS-464?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12709510#action_12709510
 ] 

Kai Grabfelder commented on IBATIS-464:
---------------------------------------

what do you mean oyu get similar error message? Please post a stacktrace. 
Furthermore you should use inject the datasource into the 
sqlmapclientfactorybean. There should be no need for you to have a datasource 
in your DAOs

> iBatis throws a NPE when performing a sub-select in a resultMap.
> ----------------------------------------------------------------
>
>                 Key: IBATIS-464
>                 URL: https://issues.apache.org/jira/browse/IBATIS-464
>             Project: iBatis for Java
>          Issue Type: Bug
>          Components: SQL Maps
>    Affects Versions: 2.2.0, 2.3.0
>         Environment: WinXP, Java 1.5, originally discovered when moving to 
> Spring 2.0.6 (spring-ibatis depends on ibatis 2.3.0)
>            Reporter: Mitchell L. Waters III
>            Priority: Blocker
>
> iBatis throws a NullPointerException when performing a sub-select in a 
> resultMap. 
> For some foo record in the DB, there are a variable number of comments. 
> iBatis allows the user to return an object that contains the information from 
> the foo table and return the list/array/collection of related items (comments 
> in this example) from a separate table that relate to the foo record, using a 
> resultMap like what is listed below.
> <resultMap class="test.FooDto" id="fooResult">
>       <result property="foo" column="foo" />
>       <result property="bar" column="bar" />
>       <result property="comments" select="getCommentList" column="{foo=foo}" 
> />
> </resultMap>
> This works without a hitch in iBatis 2.1.7. However when you attempt to do 
> the same in iBatis 2.2.0 or 2.3.0, you get a NPE (stack trace to follow). 
> Digging in a bit, it seems that the session returned to do the SessionScope 
> that is returned for the sub-select is different than that used to run the 
> original select (different than the behavior in 2.1.7) and that the 
> transaction/transaction manager for the new SessionScope object is null. It 
> ends up throwing when it attempts to start a new transaction for the 
> sub-select. 
> I originally saw this problem when updating my application to use Spring 
> 2.0.6 (which uses iBatis 2.3.0 as a dependency of the spring-ibatis module), 
> but upon further investigation I was able to isolate it to being in the 
> ibatis-sqlmap module. I've since set up our project to use Spring 2.0.6 with 
> an older version (2.1.7) of iBatis, and this works fine. While testing the 
> problem, we tested iBatis 2.1.7, 2.2.0 and 2.3.0 with both Spring 1.2.9 and 
> 2.0.6, and we only experience the problem with iBatis 2.2.0 and 2.3.0.
> Hopefully, this will be fixed but until then we will be sticking with 2.1.7.
> Thank you,
> Mitch Waters
> org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; 
> uncategorized SQLException for SQL []; SQL state [null]; error code [0];   
> --- The error occurred in test.xml.  
> --- The error occurred while applying a result map.  
> --- Check the complexResult.  
> --- Check the result mapping for the 'roles' property.  
> --- Cause: java.lang.NullPointerException; nested exception is 
> com.ibatis.common.jdbc.exception.NestedSQLException:   
> --- The error occurred in test.xml.  
> --- The error occurred while applying a result map.  
> --- Check the complexResult.  
> --- Check the result mapping for the 'roles' property.  
> --- Cause: java.lang.NullPointerException
> Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:   
> --- The error occurred in test.xml.  
> --- The error occurred while applying a result map.  
> --- Check the complexResult.  
> --- Check the result mapping for the 'roles' property.  
> --- Cause: java.lang.NullPointerException
>       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:615)
>       at 
> com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:589)
>       at 
> com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
>       at 
> org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(SqlMapClientTemplate.java:269)
>       at 
> org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:194)
>       at 
> org.springframework.orm.ibatis.SqlMapClientTemplate.executeWithListResult(SqlMapClientTemplate.java:220)
>       at 
> org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:267)
>       at 
> org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:261)
>       at dbtest.UserDao.queryForList(UserDao.java:23)
>       at dbtest.UserDao.complexQuery(UserDao.java:14)
>       at dbtest.UserDaoTest.testGetComplexUserList(UserDaoTest.java:43)
>       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:585)
>       at junit.framework.TestCase.runTest(TestCase.java:164)
>       at junit.framework.TestCase.runBare(TestCase.java:130)
>       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:120)
>       at junit.framework.TestSuite.runTest(TestSuite.java:230)
>       at junit.framework.TestSuite.run(TestSuite.java:225)
>       at 
> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
>       at 
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
> Caused by: java.lang.NullPointerException
>       at 
> com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.endTransaction(SqlMapExecutorDelegate.java:782)
>       at 
> com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.endTransaction(SqlMapSessionImpl.java:176)
>       at 
> com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.endTransaction(SqlMapClientImpl.java:154)
>       at 
> com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.autoEndTransaction(SqlMapExecutorDelegate.java:883)
>       at 
> com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:622)
>       at 
> com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:589)
>       at 
> com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
>       at 
> com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:95)
>       at 
> com.ibatis.sqlmap.engine.mapping.result.loader.ResultLoader.getResult(ResultLoader.java:72)
>       at 
> com.ibatis.sqlmap.engine.mapping.result.loader.ResultLoader.loadResult(ResultLoader.java:59)
>       at 
> com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.getNestedSelectMappingValue(BasicResultMap.java:502)
>       at 
> com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.getResults(BasicResultMap.java:340)
>       at 
> com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.java:381)
>       at 
> com.ibatis.sqlmap.engine.execution.SqlExecutor.handleMultipleResults(SqlExecutor.java:301)
>       at 
> com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:190)
>       at 
> com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205)
>       at 
> com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)
>       ... 30 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to