我花了一整天时间尝试使用JPA运行本机SQL,以用于旧版迁移项目。我已将查询简化为应工作的内容。
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调用工作正常。
有没有人有想法?
答案 0 :(得分:0)
好的,我解决了。
如果我将代码放在我的Remote bean(Dao)中,它就可以了。 如果我将代码放在我的Session bean(注入Dao)中,它就不起作用。
我猜想从远程bean返回时,必须在某些时候切断对EntityManager的引用。
这是一个EJB问题(或者说我对EJB问题的理解很差),但是从OpenJPA代码抛出的NPE对我来说似乎仍然是一个错误。