Hi Mike,

How are you calling the mapped statement on the Java side?

Also, it's not clear why you're going to the trouble of a nested
select ("getCurvePoints") when it seems from your table design that
there will be one and only one x-y pair for a primary key.  Would you
elaborate on why you are attempting this approach?

Ted

On 21/03/07, Mikael Andersson <[EMAIL PROTECTED]> wrote:
Hi,
I'm new to iBATIS and need some help with a problem I'm having.

I have a table called CURVE which contains curve points for loads of curves
(graph curves), where each curve can have a dynamic number of curve points.

Table structure:
CURVE_NAME | CURVE_CATEGORY | OFFSET | VALUE

CURVE_NAME and CURVE_CATEGORY are the primary keys, OFFSET is the x-value
and VALUE is the y-value

SqlMap :

<resultMap id="CurveBOResult" class=" test.bo.CurveBO">
    <result column="CURVE_NAME" jdbcType="CHAR" property="curveName"/>
   <result column="CURVE_CATEGORY" jdbcType="CHAR"
property="curveCategory"/>
    <result property="curvePoints" select="getCurvePoints"
column="{curveName=CURVE_NAME,curveCategory=CURVE_CATEGORY}"/>
  </resultMap>

  <resultMap id="CurvePointBOResult" class=" test.bo.CurvePointBO">
    <result column="VALUE" jdbcType="DOUBLE" property="value"/>
    <result column="OFFSET" jdbcType="DOUBLE" property="offset"/>
  </resultMap>

    <select id="selectAll" resultMap="CurveBOResult">
        select distinct
           CURVE_NAME, CURVE_CATEGORY
        from dbo.CURVE
    </select>

    <select id="getCurvePoints" resultMap="CurvePointBOResult">
        select
            VALUE, OFFSET
        from dbo.CURVE
        where CURVE_NAME = #curveName#
          and CURVE_CATEGORY = #curveCategory#
    </select>

CurveBO.java has a:  private List<CurvePointBO> curvePoints = new
ArrayList<CurvePointBO>(19);
with public getter and setter.

When I run this I get the following error message:

org.springframework.jdbc.UncategorizedSQLException:
SqlMapClient operation; uncategorized SQLException for SQL []; SQL state
[null]; error code [0];
--- The error occurred in sqlmap/dbo_CURVES_SqlMap.xml.
 --- The error occurred while applying a result map.
--- Check the dbo_CURVE.CreditSpreadBOResult.
--- Check the result mapping for the 'curvePoints' property.
--- Cause: java.lang.NullPointerException ; nested exception is
com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in sqlmap/dbo_CURVE_SqlMap.xml.
--- The error occurred while applying a result map.
--- Check the dbo_CURVE.CurveBOResult.
--- Check the result mapping for the 'curvePoints' property.
--- Cause: java.lang.NullPointerException
com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in sqlmap/dbo_CURVE_SqlMap.xml.
--- The error occurred while applying a result map.
--- Check the dbo_CURVE.CurveBOResult.
--- Check the result mapping for the 'curvePoints' 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:231)
    at
org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:168)
    at
org.springframework.orm.ibatis.SqlMapClientTemplate.executeWithListResult(SqlMapClientTemplate.java:190)
    at
org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList
(SqlMapClientTemplate.java:229)
    at
test.dao.CurveBODAOImpl.selectAll(CreditSpreadBODAOImpl.java:40)
    at
testa.dao.TestCurveBODAOImpl.testSelectdAll(TestCreditSpreadBODAOImpl.java:38)
    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: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.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
    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)
    ... 28 more


Have a feeling that I missed something simple :)

Cheers,
 Mike


Reply via email to