getResultList() 中的 IBM OpenJPA NullPointerException

Posted

技术标签:

【中文标题】getResultList() 中的 IBM OpenJPA NullPointerException【英文标题】:IBM OpenJPA NullPointerException in getResultList() 【发布时间】:2013-03-04 10:01:38 【问题描述】:

我花了一整天的时间试图让原生 SQL 与 JPA 一起运行,用于遗留迁移项目。我已将查询简化为应该工作的内容。

Query query = localEm.createNativeQuery("SELECT ID FROM TABLE");
List results = query.getResultList(); 

但我通过 query.getResultList() 从 JPA 代码中获得了 NPE:

org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:328) 处出现 NullPointerException

这让我发疯。我已经搜索了QueryImpl source。我正在使用 IBM WebSphere,(WSJPA 2.1.1-SNAPSHOT 和 OpenJPA 2.1.1-SNAPSHOT),所以行号没有帮助,但看起来这部分代码没有任何重大变化2.2.0。但我看不出他们的代码有什么问题。我与 localEm(实体管理器)的其他 JPA 调用工作正常。

有人有想法吗?

【问题讨论】:

micAcc的类型和值是什么?相应列的数据类型是什么?也许你遇到了映射问题。如果从查询中删除 mic_acc 字段会怎样? micAcc 是一个String,'D000001546',在db中列是CHAR(10),在mapping中映射为String。删除 WHERE 子句仍会导致 getResultList() 中出现 NPE。 请忽略前三个 cmets,因为我开始询问有关 query.setParameter() 抛出 NPE 的问题。我删除了问题中的 WHERE 子句,所以现在是关于 getResultList 抛出 NPE 的问题。 【参考方案1】:

好的,我解决了。

如果我将代码放在我的远程 bean(道)中,它就可以工作。 如果我将代码放在我的 Session bean(注入 Dao)中,它就不起作用。

我猜想当从远程 bean 返回时,对 EntityManager 的引用可能在某个时候被切断了。

这是一个 EJB 问题(或者更确切地说,我对 EJB 问题的理解很差),但是从 OpenJPA 代码抛出的 NPE 对我来说仍然是一个错误。

【讨论】:

以上是关于getResultList() 中的 IBM OpenJPA NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate Search查询中的fullTextQuery.getResultList()上的com.google.gson.JsonArray.getAsString错误

hibernate getResultList() 返回不同的数据

当前CallableStatement ou不是ResultSet,但是调用了getResultList(MySQL)

为啥要在缓存中获取 EclipseLink JPA query.getResultList() 结果的正确原因是啥?

javax.persistence.Query.getResultList() 可以返回 null 吗?

是否可以使用 JPA 从 javax.persistence.Query.getResultList() 流式传输结果?