Grails 需要停止导致事务失败的异常

Grails 需要停止导致事务失败的异常,grails,gorm,Grails,Gorm,在我的Grails2.3.9代码中,可以抛出异常,但这不会导致事务失败 流程是ServiceA.ServiceA()通过其他几个服务间接调用ServiceB.ServiceB()ServiceB.ServiceB()引发异常。其他几个服务调用ServiceB.ServiceB(),但我只希望事务在调用它时不会失败 这就是我尝试过的: 标记ServiceA.ServiceA()标记为@Transactional(norollboor=[MyException.class]) 上面的ServiceA

在我的Grails2.3.9代码中,可以抛出异常,但这不会导致事务失败

流程是
ServiceA.ServiceA()
通过其他几个服务间接调用
ServiceB.ServiceB()
ServiceB.ServiceB()
引发异常。其他几个服务调用
ServiceB.ServiceB()
,但我只希望事务在调用它时不会失败

这就是我尝试过的:

  • 标记
    ServiceA.ServiceA()
    标记为
    @Transactional(norollboor=[MyException.class])
  • 上面的
    ServiceA
    标记为
    static transactional=false
  • 两者都不起作用

    我还尝试:

  • 上面还有
    ServiceB.ServiceB()
    标记为
    @Transactional(norollboor=[MyException.class])
  • 所有上述内容还带有标记为“静态事务=假”的
    ServiceB
  • 为了测试这一点,我正在运行一个spock集成测试。为了确保集成测试是事务性的,在集成测试的顶部输入I
    static transactional=false

    我实现这一点的唯一方法是将ServiceA和ServiceB之间的每个服务设置为
    static transactional=false

    否则,我会看到:

    org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
        at GrailsMelodyGrailsPlugin$_closure4_closure15_closure16.doCall(GrailsMelodyGrailsPlugin.groovy:165)
    

    这是唯一的解决办法吗

    我想确保我理解这里的预期功能。您是否打算让BEGIN TRANSACTION ServiceA call->call X services包括ServiceB->异常->更多呼叫->提交事务?意思是您确实想要一个事务,并且事务要在中间进行异常,它在GRAILS中使用视图模式中的打开会话。默认情况下,它在开始和结束时打开事务。Grails的哪个版本?您是否尝试将不希望参与事务的方法标记为@Transactional(propagation=propagation.NOT_SUPPORTED),因为这将暂停这些方法的事务。