em.createNativeQuery() returns空指针异常,无法加入CMTTransaction

em.createNativeQuery() returns a null pointer exception and cannot join CMTTransaction

我正在尝试使用 JPA hibernate 编写一个可以从 DB2 检索数据的应用程序 table:"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.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 提供商配置。我正在为 DB2 通用 jdbc 驱动程序提供程序使用 db2jcc 驱动器 jar。选择 "db2 using IBM jcc driver" 后正常。