无法回滚Hibernate事务;嵌套异常是org.hibernate.TransactionException:JDBC回滚失败

时间:2018-02-26 19:19:50

标签: java web-services spring-transactions hibernateexception

我有一个应用程序,其中包含一个使用Spring和hibernate的Web服务,以便从数据库中检索数据。 其他应用程序在其应用程序中调用此Web服务。

网络服务的流程:

Webservice类方法(调用manager类方法) - >经理类方法--->调用DAO方法)

 Webservice class :

 public List getXXX(){
      managerClass.getXX();

  }

 manager Class:

 @Transactional(readOnly=true)

 Public List getXX(){
      DAOClass.getX();
  }

DAO类(它使用hibernate和逻辑来检索数据):

   public List getX(){
      Criteria query 
     =getSessionFactory().getCurrentSession()
   .createCriteria(dataObject.class);
    query.add(Restrictions.eq(dataObject.type, systemId));
    query.addOrder(Order.asc(dataObject.TYPE));
    query.addOrder(Order.asc(dataObject.code));

    return query.list();

    }

这个Webservice方法(通过调用manager和DAO类)从数据库中提供列表。除了有时候它一直很好。

我没有更新或插入任何数据,我只是获取数据

(流程是:Webservice - > manager Class - > DAO - > hibernate)

一个客户端正在访问此方法以在其应用程序中获取List。他始终正确地获取数据。但有时他会得到此异常:

  

javax.xml.ws.soap.SOAPFaultException:无法回滚Hibernate事务;嵌套异常是org.hibernate.TransactionException:JDBC回滚失败
                 at org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.createSystemException(MethodMarshallerUtils.java:1346)
                 在org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.demarshalFaultResponse(MethodMarshallerUtils.java:1072)
                 在org.apache.axis2.jaxws.marshaller.impl.alt.DocLitWrappedMethodMarshaller.demarshalFaultResponse(DocLitWrappedMethodMarshaller.java:593)
                 在org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.getFaultResponse(JAXWSProxyHandler.java:559)
                 在org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.createResponse(JAXWSProxyHandler.java:497)
                 在org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:404)
                 在org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:208)

根据Spring的默认行为,每当抛出异常时,它都会尝试回滚。它正在尝试,但不知何故无法回滚。由于它是使用注释的声明式事务,如何跟踪此异常的确切原因?基于异常,我肯定知道DAO类方法抛出异常。但我无法跟踪确切原因(无论是连接关闭问题还是其他任何事情)。我只想在DAO类中使用异常处理以便知道确切的原因。我可以在DAO类方法中使用try / catch块来获得打印确切原因的堆栈跟踪吗? 我只想再次提醒一下,它一直工作正常,但有时因为这个例外而无法正常工作。

我希望我清楚地解释了我的问题。请通过提供解决方案来做到这一点。

0 个答案:

没有答案