正如我的问题所暗示的,我有一个一对多的亲子关系,如下所示:
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添加到我的服务中来回滚失败的保存。我已经坚持了一个星期,而且距离寻找解决方案还很近。
有人可以指出有关此的任何相关资源吗?任何帮助将不胜感激。