当前位置: 首页 > 知识库问答 >
问题:

Grails-事务Spring noRollback不工作

惠泳
2023-03-14

我使用的是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")
     }
}

我的例外:

class MyException extends Exception{

 def errors = []

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

}

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

注:如果我更改static transactional=true,则不会发生错误。

知道吗?

共有2个答案

贺元明
2023-03-14

这应该有效:

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

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

@Transactional
class myService(...) {
     static transactional = false
     ...
}
郎和通
2023-03-14

如果使用注释,则应设置

静态事务=false

即使grails的事务代理无效,这样就不会与Spring AOP中的代理重叠

 类似资料:
  • 嗨,我正在尝试开发带有事务的spring和hibernate应用程序,我正在使用Spring4。x和hibernate 4。下面是我的代码片段 应用程序上下文。xml servlet上下文。xml 坚持。xml finnaly meservice看起来像这样 和 这里会发生运行时异常,但db记录没有回滚。

  • 我是一个新的Spring和学习的事务概念。无法使@Transactional工作。 用例: 当getEmployee()抛出RuntimeException时,员工和员工详细信息的数据插入应该回滚。但回滚没有发生。我使用的是Oracle数据库11g和spring 4.3.1版本。下面是正在运行的独立java代码。

  • 我正在尝试在数据库中保存对象。正在执行代码并创建实体的Id,但实体未持久化到数据库(未插入行): 从三行(beginTransation,flush,commit)中删除注释解决了问题,但是为什么注释在这里不起作用呢? spring XML: POM xml文件:

  • 问题内容: 当服务中抛出RuntimeException时,我使用Grail的回滚功能将所有服务更新为事务性。在大多数情况下,我都这样做: 无论如何,我想验证这是否确实会回滚事务……这让我开始思考是否在这一点上已经提交了。此外,如果没有,设置flush:true会改变这一点吗?我对Spring / Hibernate如何完成所有这些工作不是很熟悉:) 问题答案: 是的,那样做。 默认情况下,Gra

  • 请参阅代码。 > 当我调用方法@Async loadMarkUpPCT()时,数据没有提交到表中。它表现得好像是非牵引的。 当我从loadMarkUpPCT(类1)中删除@Async(即非异步)时,数据被提交并按预期正常:事务性) 我希望@Async和@Transactional的结果是一样的,但事实并非如此。请解释一下,我做错了什么? 编辑:我刚编辑过代码日志 流程方面:AppDataLoade

  • 我将Spring 3.2.4与JavaFX结合使用,并希望实现一种方法,其中操作将在事务中执行。我在控制器中的代码如下所示: 以及我的应用程序上下文: 尝试运行时,我收到以下错误消息: 该方法存在。删除注释,或者将方法从public更改为private,或者从配置中删除bean,程序就会运行,但事务注释根本不起作用。删除代理目标会导致另一个错误。