谷物|在一对多关系中,如果子级保存失败,则需要回滚每个父级的保存

时间:2019-02-04 09:36:26

标签: grails transactions grails-domain-class

正如我的问题所暗示的,我有一个一对多的亲子关系,如下所示:

Class A {

//Some fields

}

static hasMany = [lineitems: B]

Class B {

   A field1
// Other fields

}

static hasMany = [mapping: C, input: D, accommodation: E]
static belongsTo = [field1: A]


Class C {

 B field2

//Other fields

}

static belongsTo = [field2: B]


Class D {

 B field2

//Other fields

}

static belongsTo = [field2: B]


Class E {

 B field2

//Other fields

}

static belongsTo = [field2: B]

每当我保存A时,都需要创建一个新的B对象,并将其保存。 C,D和E相同。下面提到的示例代码:

try{

    A a

    def aSaveSuccess = a.save(flush: true, failOnError: true, insert: true)

    if(aSaveSuccess){
        B b
        b.field1 = a

        def bSaveSuccess = b.save(flush: true, failOnError: true, insert: true)

        if(bSaveSuccess){

            C c
                        c.field2 = b
                        def cSaveSuccess = c.save(flush: true, failOnError: true, insert: true)


            D d
                        d.field2 = b
                        def dSaveSuccess = d.save(flush: true, failOnError: true, insert: true)


            E e
                        e.field2 = b
                        def eSaveSuccess = e.save(flush: true, failOnError: true, insert: true)

        }
        else{
            //Some code here
        }
    }
    else{
      //Some code here
    }
}
catch{
    //Error handing code here
}

但是,每当保存c时出错,我都无法弄清楚如何回滚其父对象的保存,即a和b。我已经尝试研究此问题,但是我发现的唯一解决方案是添加

static belongsTo

static hasMany

这似乎也不起作用。我唯一能做的就是通过将@Transactional添加到我的服务中来回滚失败的保存。我已经坚持了一个星期,而且距离寻找解决方案还很近。

有人可以指出有关此的任何相关资源吗?任何帮助将不胜感激。

0 个答案:

没有答案