ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Richard Yee <r...@cruzio.com>
Subject Re: n+1 Problem NullPointerException
Date Tue, 05 Dec 2006 04:02:06 GMT
Sorry,
I see it that it exists.

-Richard

Yee, Richard K CTR DMDC wrote:
> I think the problem is here in your sqlMap
>
>      resultMap="CatItem.itemsResults" />
>
> I don't think this map exists.
>
> -Richard
>
>
> -----Original Message-----
> From: Warren [mailto:warren@clarksnutrition.com] 
> Sent: Friday, December 01, 2006 4:46 PM
> To: user-java@ibatis.apache.org
> Subject: Re: n+1 Problem NullPointerException
>
>
> 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(Ba
> seSqlMapDao.java:35)
>     at 
> com.clarks.spanky.persistence.sqlmapdao.BatchOrderSqlMapDao.getBatchedItemPr
> omoPrices(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.executeQueryWith
> Callback(GeneralStatement.java:155)
>     at 
> com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForL
> ist(GeneralStatement.java:95)
>     at 
> com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExec
> utorDelegate.java:247)
>     at 
> com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExec
> utorDelegate.java:232)
>     at 
> com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionIm
> pl.java:71)
>     at 
> com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl
> .java:49)
>     at 
> com.clarks.spanky.persistence.sqlmapdao.BaseSqlMapDao.executeQueryForList(Ba
> seSqlMapDao.java:32)
>     ... 35 more
> Caused by: java.lang.NullPointerException
>     at 
> com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.getPrimitiveResultMap
> pingValue(BasicResultMap.java:268)
>     at 
> com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.getResults(BasicResul
> tMap.java:107)
>     at 
> com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.jav
> a: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.executeQueryWith
> Callback(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-postgr
>> es.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-postgr
>> es.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