Grails - Transactional Spring noRollback不工作

时间:2013-03-19 14:57:14

标签: spring grails spring-transactions

我正在使用grails 1.3.7并拥有以下代码:

Grails服务:

class MyClass {
   static transactional = true

  @Transactional(noRollbackFor = MyException.class)
  public MyObject myMethod(Map map1, Boolean bl1 = false) throws MyException {
   //codes
     if(...){
        throw new MyException("msg")
     }
}

MyException:

class MyException extends Exception{

 def errors = []

MyException(errors){
    super(errors.toString())
    this.errors = errors
}

}

当代码抛出MyException时,我发现以下错误:事务已回滚,因为它已被标记为仅回滚

聚苯乙烯。如果我更改static transactional = true,则不会发生错误。

任何想法?

2 个答案:

答案 0 :(得分:0)

我使用注释,你应该设置

static transactional=false

即。使grails的事务代理无效,以便与spring AOP的代理没有重叠

答案 1 :(得分:0)

这应该有效:

@Transactional(noRollbackFor=[FooException, BarException])
def doSomething(...) {
     ...
}

但请记住,如果您使用事务性注释,grails自动事务在您放置它的服务中不起作用。你需要设置:

@Transactional
class myService(...) {
     static transactional = false
     ...
}