Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails-事务性Spring NOROLLBAFF不工作_Spring_Grails_Spring Transactions - Fatal编程技术网

Grails-事务性Spring NOROLLBAFF不工作

Grails-事务性Spring NOROLLBAFF不工作,spring,grails,spring-transactions,Spring,Grails,Spring Transactions,我使用的是Grails1.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

我使用的是Grails1.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")
     }
}
我的例外:

class MyException extends Exception{

 def errors = []

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

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

另外,如果我更改static transactional=true,则不会发生错误


有什么想法吗?

如果您使用注释,您应该设置


静态事务=false

i、 e.使grails的事务代理无效,这样就不会与spring AOP中的代理重叠

@Transactional(noRollbackFor=[FooException, BarException])
def doSomething(...) {
     ...
}
但是请记住,如果使用事务性注释,grails自动事务在放置它的服务中不起作用。您需要设置:

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

MyClass Spring是否受管理?假设
MyClass
是一个grails服务,您的方法是否调用任何其他事务性方法?如果是这样的话,
norollboor
可能会丢失。该方法调用其他域方法。@codelark和我要问的是MyClass是否是Grails服务(或者是Spring托管的服务)?否则,它将不会自动参与事务。