You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Ted Leung (JIRA)" <ji...@apache.org> on 2012/09/26 04:48:07 UTC

[jira] [Commented] (OPENJPA-2267) native query select with null result causes NullPointerException

    [ https://issues.apache.org/jira/browse/OPENJPA-2267?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13463481#comment-13463481 ] 

Ted Leung commented on OPENJPA-2267:
------------------------------------

for a work around (at least for mysql users) change the select to 

select ifnull(max(id),0) from Data

Might not work for all use cases but in the case of trying to retrieve the max(id) it will work.
                
> native query select with null result causes NullPointerException
> ----------------------------------------------------------------
>
>                 Key: OPENJPA-2267
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2267
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: query
>    Affects Versions: 2.2.0
>         Environment: my system is fedora 16, MySql 5.5.18 (running innodb), jdk1.6.0_26, openjdk 2.2.0 (also happened in 2.1.0), mysql-connector-java 5.1.18, commons-dbcp 1.4, spring 3.1.1
>            Reporter: Ted Leung
>            Priority: Minor
>
> if you do a native query with a null resultset where the resulting object is not the model object, it causes a null pointer exception.
> ---------------------------------------------------
> mysql> desc Data;
> +--------------------------+--------------+------+-----+---------+----------------+
> | Field                    | Type         | Null | Key | Default | Extra          |
> +--------------------------+--------------+------+-----+---------+----------------+
> | id                       | bigint(20)   | NO   | PRI | NULL    | auto_increment |
> | data                     | mediumblob   | YES  |     | NULL    |                |
> +--------------------------+--------------+------+-----+---------+----------------+
> 12 rows in set (0.01 sec)
> mysql> select count(*) from Data;
> +----------+
> | count(*) |
> +----------+
> |        0 |
> +----------+
> 1 row in set (0.00 sec)
> mysql> select max(id) from Data;
> +---------+
> | max(id) |
> +---------+
> |    NULL |
> +---------+
> 1 row in set (0.00 sec)
> now in java do :
> Query query = entityManager.createNativeQuery("select max(id) from Data", Long.class);
> List results = query.getResultList();
> The following exception ensues.
> ---------------------------------------------------
> <openjpa-2.2.0-r422266:1244990 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: Failed to execute query "select max(id) from Data". Check the query syntax for correctness. See nested exception for details.
> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:872)
> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794)
> 	at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
> 	at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:286)
> 	at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:302)
> ...
> Caused by: java.lang.NullPointerException
> 	at org.apache.openjpa.kernel.ResultPacker.pack(ResultPacker.java:202)
> 	at org.apache.openjpa.jdbc.kernel.SQLProjectionResultObjectProvider.getResultObject(SQLProjectionResultObjectProvider.java:88)
> 	at org.apache.openjpa.lib.rop.RangeResultObjectProvider.getResultObject(RangeResultObjectProvider.java:80)
> 	at org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:36)
> 	at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1251)
> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1007)
> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:863)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira