java - em.createNativeQuery() 返回空指针异常,无法加入 CMTTransaction

标签 java hibernate jpa db2 persistence

我正在尝试使用 JPA hibernate 编写一个应用程序,该应用程序可以从 DB2 表“table1”检索数据

我的查询是:

Query query = emdb2.createNativeQuery("select product_name from TEST.Table1 with UR");

我的 persistence.xml 是:

<persistence-unit name="HibernatePersistenceDB2" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/pr-data/db2</jta-data-source>
<class>com.test.entity.Table1</class>
<properties>
    <property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect"></property>
    <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.CMTTransactionFactory"></property>
    <property name="hibernate.current_session_context_class" value="jta" ></property>
    <property name="hibernate.transaction.flush_before_completion" value="true"></property> 
    <property name="hibernate.max_fetch_depth" value="3" />
    <property name="hibernate.show_sql" value="true" />
    <property name='hibernate.format_sql' value='true' /> 
</properties>

由于某种原因,我无法通过查询来检索结果。 emdb2 不为 null,查询语句抛出:

[8/15/16 11:30:37:861 EDT] 00000076 SystemErr     R java.lang.NullPointerException
[8/15/16 11:30:37:862 EDT] 00000076 SystemErr     R     at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:73)
[8/15/16 11:30:37:862 EDT] 00000076 SystemErr     R     at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:115)
[8/15/16 11:30:37:862 EDT] 00000076 SystemErr     R     at org.hibernate.engine.transaction.internal.jta.CMTTransaction.join(CMTTransaction.java:149)
[8/15/16 11:30:37:862 EDT] 00000076 SystemErr     R     at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1230)
[8/15/16 11:30:37:862 EDT] 00000076 SystemErr     R     at org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:178)
[8/15/16 11:30:37:863 EDT] 00000076 SystemErr     R     at org.hibernate.ejb.EntityManagerImpl.<init>(EntityManagerImpl.java:89)
[8/15/16 11:30:37:863 EDT] 00000076 SystemErr     R     at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:179)
[8/15/16 11:30:37:863 EDT] 00000076 SystemErr     R     at com.ibm.ws.jpa.management.JPAEMPool.getEntityManager(JPAEMPool.java:170)
[8/15/16 11:30:37:863 EDT] 00000076 SystemErr     R     at com.ibm.ws.jpa.management.JPATxEntityManager.getEMInvocationInfo(JPATxEntityManager.java:259)
[8/15/16 11:30:37:863 EDT] 00000076 SystemErr     R     at com.ibm.ws.jpa.management.JPATxEntityManager.getEMInvocationInfo(JPATxEntityManager.java:191)
[8/15/16 11:30:37:863 EDT] 00000076 SystemErr     R     at com.ibm.ws.jpa.management.JPAEntityManager.createNativeQuery(JPAEntityManager.java:325)
[8/15/16 11:30:37:863 EDT] 00000076 SystemErr     R     at com.test.dataaccess.main.TestDaoImpl.testDEBIT_CARD_PMTSCHD(TestDaoImpl.java:33)
[8/15/16 11:30:37:863 EDT] 00000076 SystemErr     R     at com.test.dataaccess.main.TestDaoImpl.testDAOMain(TestDaoImpl.java:57)
[8/15/16 11:30:37:864 EDT] 00000076 SystemErr     R     at com.test.dataaccess.main.EJSLocal0SLTestDao_178af4ed.testDAOMain(EJSLocal0SLTestDao_178af4ed.java)
[8/15/16 11:30:37:864 EDT] 00000076 SystemErr     R     at com.test.business.main.TestBoImpl.testBoMain(TestBoImpl.java:33)
[8/15/16 11:30:37:864 EDT] 00000076 SystemErr     R     at com.test.business.main.EJSLocal0SLTestBo_e36555f9.testBoMain(EJSLocal0SLTestBo_e36555f9.java)
[8/15/16 11:30:37:864 EDT] 00000076 SystemErr     R     at com.test.service.main.TestServiceImpl.testServiceMain(TestServiceImpl.java:39)
[8/15/16 11:30:37:864 EDT] 00000076 SystemErr     R     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[8/15/16 11:30:37:864 EDT] 00000076 SystemErr     R     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
[8/15/16 11:30:37:864 EDT] 00000076 SystemErr     R     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
[8/15/16 11:30:37:864 EDT] 00000076 SystemErr     R     at java.lang.reflect.Method.invoke(Method.java:611)
[8/15/16 11:30:37:864 EDT] 00000076 SystemErr     R     at org.apache.axis2.jaxws.server.dispatcher.JavaDispatcher.invokeTargetOperation(JavaDispatcher.java:120)
[8/15/16 11:30:37:865 EDT] 00000076 SystemErr     R     at com.ibm.ws.websvcs.server.dispatcher.EJBBeanDispatcher.invokeTargetOperation(EJBBeanDispatcher.java:192)
[8/15/16 11:30:37:865 EDT] 00000076 SystemErr     R     at org.apache.axis2.jaxws.server.dispatcher.JavaBeanDispatcher.invoke(JavaBeanDispatcher.java:118)
[8/15/16 11:30:37:865 EDT] 00000076 SystemErr     R     at com.ibm.ws.websvcs.server.dispatcher.EJBBeanDispatcher.invoke(EJBBeanDispatcher.java:80)
[8/15/16 11:30:37:865 EDT] 00000076 SystemErr     R     at org.apache.axis2.jaxws.server.EndpointController.invoke(EndpointController.java:111)
[8/15/16 11:30:37:865 EDT] 00000076 SystemErr     R     at org.apache.axis2.jaxws.server.JAXWSMessageReceiver.receive(JAXWSMessageReceiver.java:161)
[8/15/16 11:30:37:865 EDT] 00000076 SystemErr     R     at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:212)
[8/15/16 11:30:37:865 EDT] 00000076 SystemErr     R     at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172)
[8/15/16 11:30:37:865 EDT] 00000076 SystemErr     R     at com.ibm.ws.websvcs.transport.http.WASAxis2Servlet.doPost(WASAxis2Servlet.java:1606)
[8/15/16 11:30:37:866 EDT] 00000076 SystemErr     R     at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
[8/15/16 11:30:37:866 EDT] 00000076 SystemErr     R     at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
[8/15/16 11:30:37:866 EDT] 00000076 SystemErr     R     at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1230)
[8/15/16 11:30:37:866 EDT] 00000076 SystemErr     R     at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779)
[8/15/16 11:30:37:866 EDT] 00000076 SystemErr     R     at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
[8/15/16 11:30:37:866 EDT] 00000076 SystemErr     R     at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
[8/15/16 11:30:37:866 EDT] 00000076 SystemErr     R     at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1114)
[8/15/16 11:30:37:866 EDT] 00000076 SystemErr     R     at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87)
[8/15/16 11:30:37:866 EDT] 00000076 SystemErr     R     at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:919)
[8/15/16 11:30:37:867 EDT] 00000076 SystemErr     R     at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
[8/15/16 11:30:37:867 EDT] 00000076 SystemErr     R     at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200)
[8/15/16 11:30:37:867 EDT] 00000076 SystemErr     R     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:463)
[8/15/16 11:30:37:867 EDT] 00000076 SystemErr     R     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:530)
[8/15/16 11:30:37:867 EDT] 00000076 SystemErr     R     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:316)
[8/15/16 11:30:37:867 EDT] 00000076 SystemErr     R     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:287)
[8/15/16 11:30:37:867 EDT] 00000076 SystemErr     R     at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
[8/15/16 11:30:37:867 EDT] 00000076 SystemErr     R     at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
[8/15/16 11:30:37:868 EDT] 00000076 SystemErr     R     at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
[8/15/16 11:30:37:868 EDT] 00000076 SystemErr     R     at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
[8/15/16 11:30:37:868 EDT] 00000076 SystemErr     R     at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
[8/15/16 11:30:37:868 EDT] 00000076 SystemErr     R     at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
[8/15/16 11:30:37:868 EDT] 00000076 SystemErr     R     at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
[8/15/16 11:30:37:868 EDT] 00000076 SystemErr     R     at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
[8/15/16 11:30:37:868 EDT] 00000076 SystemErr     R     at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
[8/15/16 11:30:37:868 EDT] 00000076 SystemErr     R     at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1881)

最佳答案

我发现了这个问题。它与 jdbc 提供程序配置有关。我使用 db2jcc 驱动 jar 作为 DB2 通用 jdbc 驱动程序提供程序。选择“db2 using IBM jcc driver”后,它工作正常。

关于java - em.createNativeQuery() 返回空指针异常,无法加入 CMTTransaction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38958448/

相关文章:

java - 如何使用 Graphstream 将图形存储在文本文件中

java - 动态返回一个ArrayList

java - 简单的java代码行捕获了UnsupportedEncodingException,我不明白为什么

java - 如何在 char 字段上使用 Spring/Hibernate 验证?

java - 连接多个表不返回结果

java - IntelliJ IDEA 对 Spring Boot 项目的持久化支持

java - 在 iOS4 上部署 Java 应用程序是否有合法的、自动化的方法?

java - 映射实现接口(interface)的两个类之一

Java EE(开放)JPA - 无法检索 EntityManagerFactory

java - 无法在简单的 JPA 存储库上创建查询元模型