ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Warren <war...@clarksnutrition.com>
Subject Re: n+1 Problem NullPointerException
Date Sat, 02 Dec 2006 00:45:47 GMT
Caused by: com.ibatis.dao.client.DaoException: Error executing query for 
list.  Cause: com.ibatis.common.jdbc.exception.NestedSQLException:  
--- The error occurred in 
com/clarks/spanky/persistence/sqlmapdao/sql/postgres/batchOrder-postgres.xml.  

--- The error occurred while applying a result map. 
--- Check the BatchOrder.catItemsResults. 
--- Check the result mapping for the 'items' property. 
--- Cause: java.lang.NullPointerException
Caused by: java.lang.NullPointerException
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:  
--- The error occurred in 
com/clarks/spanky/persistence/sqlmapdao/sql/postgres/batchOrder-postgres.xml.  

--- The error occurred while applying a result map. 
--- Check the BatchOrder.catItemsResults. 
--- Check the result mapping for the 'items' property. 
--- Cause: java.lang.NullPointerException
Caused by: java.lang.NullPointerException
    at 
com.clarks.spanky.persistence.sqlmapdao.BaseSqlMapDao.executeQueryForList(BaseSqlMapDao.java:35)
    at 
com.clarks.spanky.persistence.sqlmapdao.BatchOrderSqlMapDao.getBatchedItemPromoPrices(BatchOrderSqlMapDao.java:270)
    ... 34 more
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:  
--- The error occurred in 
com/clarks/spanky/persistence/sqlmapdao/sql/postgres/batchOrder-postgres.xml.  

--- The error occurred while applying a result map. 
--- Check the BatchOrder.catItemsResults. 
--- Check the result mapping for the 'items' property. 
--- Cause: java.lang.NullPointerException
Caused by: java.lang.NullPointerException
    at 
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:155)
    at 
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:95)
    at 
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:247)
    at 
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:232)
    at 
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:71)
    at 
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:49)
    at 
com.clarks.spanky.persistence.sqlmapdao.BaseSqlMapDao.executeQueryForList(BaseSqlMapDao.java:32)
    ... 35 more
Caused by: java.lang.NullPointerException
    at 
com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.getPrimitiveResultMappingValue(BasicResultMap.java:268)
    at 
com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.getResults(BasicResultMap.java:107)
    at 
com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.java:274)
    at 
com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:125)
    at 
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:172)
    at 
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:139)
    ... 41 more


Jeff Butler wrote:
> Sorry for your frustration, but you'll have to tell us where the 
> NullPointerException is coming from.  Could you post a stack trace?
>  
> Jeff Butler
>
>  
> On 12/1/06, *Warren* <warren@clarksnutrition.com 
> <mailto:warren@clarksnutrition.com>> wrote:
>
>     Stefan Langer wrote:
>     > Warren wrote:
>     >> I am having problems with an n+1 sql map. I am getting the
>     following
>     >> error messages:
>     >>
>     >> --- The error occurred while applying a result map. --- Check the
>     >> CatItem.catItemsResults. --- Check the result mapping for the
>     'items'
>     >> property. --- Cause: java.lang.NullPointerException
>     >>
>     >> I have put the following test together:
>     >>
>     >> Objects
>     >>
>     >> TestCat object
>     >>
>     >> private int catPK;
>     >> private String catName;
>     >> private List items;
>     >>
>     >> TestItem object
>     >>
>     >> private int itemPK;
>     >> private String itemName;
>     >>
>     >> Database Tables
>     >>
>     >> testitem table
>     >>
>     >> itm_pk int4,
>     >> itm_cat_fk int4,
>     >> itm_name char(20),
>     >>
>     >> testcat table
>     >>
>     >> cat_pk int4,
>     >> cat_name char(20)
>     >>
>     >> <resultMap id="catItemsResults" class="testCat" groupBy="catPK" >
>     >>   <result property="catPK" column="cat_pk" javaType="int"
>     >> jdbcType="INTEGER"/>
>     >>   <result property="catName" column="cat_name" javaType="string"
>     >> jdbcType="CHAR"/>
>     >>   <result property="items" javaType="java.util.List"
>     >> resultMap="CatItem.itemsResults" />
>     >> </resultMap>
>     >>   <resultMap id="itemsResults" class="testItem" >
>     >>  <result property="itemName" column="itm_name" javaType="string"
>     >> jdbcType="CHAR"/>
>     >> </resultMap>
>     >>
>     >> <select id="getCatWithItems" resultMap="catItemsResults"
>     >>  SELECT cat_pk, cat_name, itm_name FROM testcat LEFT JOIN
>     testitem ON
>     >> cat_pk = itm_cat_fk
>     >> </select>
>     >>
>     >> I have looked at the FAQ, docs and mailing list archive and I
>     can not
>     >> figure out what I am doing wrong. I have tried it on a Postgres db
>     >> with a postgres driver and a Sybase db with an ODBC driver. I still
>     >> get the same results. I am running version 2.1.7 of Ibatis.
>     What am I
>     >> doing wrong?
>     >>
>     >> Thanks,
>     >>
>     >> Warren
>     > Where does the nullpointer occur? In your code or in ibatis code?
>     > When you run your query you will have a item in your items map even
>     > though the testCat does not contain any testItem. This item will
>     have
>     > all null values. So if any of the methods in testItem throw a
>     > nullpointerexception when being fed with a null value that will
>     > probably be the case.
>     >
>     > I just filed an enhancement request for Ibatis to prevent ibatis
>     from
>     > creating such null objects. Feel free to vote or comment on it.
>     > The issue is: IBATIS-375
>     The null pointer occurs in:
>
>     sqlMap.queryForList(statementName, parameterObject)
>
>     I should get a List of TestCat objects with a List of TestItems,
>     shouldn't I? I couldn't quite follow your explanation of how
>     TestCat and
>     the items List are being populated. I think I understand that if a
>     testCat does not have any testItems, the items List in testCat will
>     still have a testItem in it with it's properties set to null, correct?
>     But my query does not return any testCats without a testItem in it. My
>     object setters are all very simple:
>
>     public void setCatName(String catName)
>     {
>        this.catName = catName;
>     }
>
>     When I set the loggers to DEBUG I get the following log entries:
>
>     DEBUG [http-8080-Processor24] - Checked out connection 2100665
>     from pool.
>     DEBUG [http-8080-Processor24] - {conn-100186} Connection
>     DEBUG [http-8080-Processor24] - {pstm-100187} PreparedStatement:
>     SELECT cat_pk, itm_pk, cat_name, itm_name FROM testcat LEFT JOIN
>     testitem ON cat_pk = itm_cat_fk
>     DEBUG [http-8080-Processor24] - {pstm-100187} Parameters: []
>     DEBUG [http-8080-Processor24] - {pstm-100187} Types: []
>     DEBUG [http-8080-Processor24] - {rset-100188} ResultSet
>     getBatchedItemDetails(Object batchedItems)
>     EXCEPTION=com.ibatis.dao.client.DaoException: IBATIS PROBLEM Error
>     executing query for list.  Cause:
>     com.ibatis.common.jdbc.exception.NestedSQLException:
>     --- The error occurred in
>     com/clarks/spanky/persistence/sqlmapdao/sql/postgres/batchOrder-postgres.xml.
>
>     --- The error occurred while applying a result map.
>     --- Check the BatchOrder.catItemsResults.
>     --- Check the result mapping for the 'items' property.
>     --- Cause: java.lang.NullPointerException
>     Caused by: java.lang.NullPointerException
>     Caused by: com.ibatis.common.jdbc.exception.NestedSQLException :
>     --- The error occurred in
>     com/clarks/spanky/persistence/sqlmapdao/sql/postgres/batchOrder-postgres.xml.
>
>     --- The error occurred while applying a result map.
>     --- Check the BatchOrder.catItemsResults.
>     --- Check the result mapping for the 'items' property.
>     --- Cause: java.lang.NullPointerException
>     Caused by: java.lang.NullPointerException
>     DEBUG [http-8080-Processor24] - Returned connection 2100665 to pool.
>
>     Is this telling me that the SELECT is not returning any records? I
>     get
>     the following results when I run the above logged SELECT directly
>     on the db:
>
>     The SELECT query returns:
>
>     ** cat_pk       cat_name        itm_name
>     1       Vitamins        Vitamin Item 3
>     1       Vitamins        Vitamin Item 1
>     1       Vitamins        Vitamin Item 2
>     2       Herbs   Herbs Item 3
>     2       Herbs   Herbs Item 2
>     2       Herbs   Herbs Item 1
>     2       Herbs   Herbs Item 4
>     3       Groceries       Grocery Item 2
>     3       Groceries       Grocery Item 3
>     3       Groceries       Grocery Item 1
>
>
>     This is on a Postgres db with a postgres driver. I have also
>     changed the
>     sqlMap to the following and I still get the same exception:
>
>     <resultMap id="catItemsResults" class="testCat" groupBy="catPK" >
>       <result property="catPK" column="cat_pk" javaType="int"
>     jdbcType="NUMERIC" nullValue="0"/>
>     <result property="catName" column="cat_name" javaType="string"
>     jdbcType="CHAR" nullValue="NULL"/>
>     <result property="items" javaType="java.util.List"
>     resultMap="CatItem.itemsResults" />
>     </resultMap>
>
>     <resultMap id="itemsResults" class="testItem" >
>        <result property="itemPK" column="itm_pk" javaType="int"
>     jdbcType="NUMERIC" nullValue="0"/>
>        <result property="itemName" column="itm_name" javaType="string"
>     jdbcType="CHAR" nullValue="NULL"/>
>     </resultMap>
>
>     <select id="getBatchedItemPromoPrices" resultMap="catItemsResults">
>       SELECT cat_pk, itm_pk, cat_name, itm_name FROM testcat LEFT JOIN
>     testitem ON cat_pk = itm_cat_fk
>     </select>
>
>     Where is the NullPointerException coming from? I am not very
>     experienced
>     with Ibatis and do not know what is going on behind the scenes.
>     This is
>     all very frustrating.
>
>


Mime
View raw message