Java 如何在spring中回滚事务时发送异常消息?

Java 如何在spring中回滚事务时发送异常消息?,java,web-services,spring,jakarta-ee,transactions,Java,Web Services,Spring,Jakarta Ee,Transactions,我有一个spring Web服务,其中我有一个DAO,其中有一个方法add(),该方法用@Transactional注释,如下所示: class MyDAOClass { @Transactional(rollbackFor = Exception.class) add(){ doAdd1(); doAdd2(); doAdd3(); } ... doAdd2() throws MyException

我有一个spring Web服务,其中我有一个DAO,其中有一个方法add(),该方法用@Transactional注释,如下所示:

class MyDAOClass {

    @Transactional(rollbackFor = Exception.class)
    add(){
        doAdd1();
        doAdd2();
        doAdd3();
    }

    ...

    doAdd2() throws MyException {
        throw new MyException ("My Exception Message");
    }

    ...

}
服务层:

现在,当我调用webservice时,服务层在内部调用该类的add()方法。服务层捕获MyException e并获取消息并放入响应对象,该对象被封送并发送回客户端。但是,当doAdd2()方法抛出异常时,事务被回滚,而不是“我的异常消息”,我在客户端得到以下错误消息:

<SOAP-ENV:Body>
  <SOAP-ENV:Fault>
     <faultcode>SOAP-ENV:Server</faultcode>
     <faultstring xml:lang="en">Transaction rolled back because it has been marked as rollback-only</faultstring>
  </SOAP-ENV:Fault>

SOAP-ENV:服务器
事务已回滚,因为它已标记为仅回滚

别客气。我发现了问题。我的服务类也被注释为@Transactional。在我删除此批注后,问题得到解决。我只是为那些可能想知道他们为什么会得到这个消息的人保留它。

我认为一个好的设计是让服务方法应该是事务性的,而不是daomethod@SubinS如果我以后必须在add()之后执行一些其他方法,即使add()回滚也应该执行这些方法,如果我使用事务性的服务方法,这是可能的吗?在这种情况下,让它们分开服务方法