gpt4 book ai didi

grails - Grails:仅在全部通过验证后才能将 parent 和子女保存到数据库的方法

转载 作者:行者123 更新时间:2023-12-02 14:30:10 30 4
gpt4 key购买 nike

我有一个父对象,仅当子对象有效时才能创建。 。子代只能在保存后按ID引用父对象(因为ID是自动递增的)。因此,我保存了父级,然后将父级分配给要保存的子级。
如果一个 child 未能保存,我该如何回滚所有父保存和所有子保存?

(这是在服务层中进行的)

 parent.save(flush:true);
children.each{child->
child.parent=parent;
if(!child.save(flush:true)){
//how to roll back all previous child saves if any AND
//initial parent save also
}
}

最佳答案

如果在事务服务中引发未捕获的异常,则事务将回滚所有内容。像这样:

package com.example

class MyService {

static transactional = true

void myMethod() {
parent.save(flush:true)
children.each{child->
child.parent = parent
if(!child.save(flush:true)){
throw new RuntimeException('Rollback')
}
}
}
}

我个人不会在生产代码中使用 RuntimeException。在这种情况下,我将创建自己的异常,并避免填写stacktrace。但是,出于示例目的,以上内容演示了您想要执行的操作。

关于grails - Grails:仅在全部通过验证后才能将 parent 和子女保存到数据库的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37013210/

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