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