Граальс |В отношении один: много, необходимо откатить сохранение каждого родителя, если сбой дочернего сохранения - PullRequest
0 голосов
/ 04 февраля 2019

Как показывает мой вопрос, у меня есть отношения один-много-родитель-потом, как показано ниже:

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, я не могу понять, как откатить сохранения своих родительских объектов, т.е.и б.Я пытался исследовать проблему, однако единственное решение, которое я нашел, было добавление

static belongsTo

и

static hasMany

, что также, похоже, не работает.Единственное, что я могу сделать, - откатить неудачное сохранение, добавив @Transactional в мой сервис.Я застрял с этим в течение недели, и я не ближе к поиску решения.

Может кто-нибудь указать мне какие-либо соответствующие ресурсы по этому поводу?Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...