Как показывает мой вопрос, у меня есть отношения один-много-родитель-потом, как показано ниже:
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 в мой сервис.Я застрял с этим в течение недели, и я не ближе к поиску решения.
Может кто-нибудь указать мне какие-либо соответствующие ресурсы по этому поводу?Любая помощь будет оценена.