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的主要内容,如果未能解决你的问题,请参考以下文章