gpt4 book ai didi

grails - Grails(2.3)@Transactional不会回滚

转载 作者:行者123 更新时间:2023-12-02 13:50:26 25 4
gpt4 key购买 nike

回滚按预期在此处完成:

@Transactional(propagation = Propagation.REQUIRES_NEW)
def test1() {
def dummy = new Dummy(name: "test1")
dummy.save()
throw new RuntimeException("test1!")
}

但是这里不是-这可能是错误的-try / catch应该不会影响行为:
@Transactional(propagation = Propagation.REQUIRES_NEW)
def test2() {
def dummy = new Dummy(name: "test2")
dummy.save()
try {
throw new RuntimeException("test2!")
} catch (all) {
println all.message
}
}

最佳答案

默认情况下,@Transactional包装该方法,以便任何未检查的异常(即RuntimeException)都将导致事务回滚。

当然,如果您在方法中捕获/处理该异常,则该异常不会传播到事务包装器,并且该事务也不会被标记为仅回滚。这似乎是您在做什么。

值得指出的是,如果抛出其他异常(并传播到包装器),则可以指示事务包装器应回滚事务。您可以使用rollbackFor批注参数来执行此操作。

例如,

@Transactional(rollbackFor=Throwable.class)
void doTransactionalWork() throws MyException { ... }

如果任何Throwable传播到包装器,即使检查过的包装器,也会导致事务回滚(即 MyException)

这应该是任何 @Transactional方法的行为,而不管是要创建新事务还是继承现有事务上下文。

关于grails - Grails(2.3)@Transactional不会回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42283507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com