我有2个域类,如下所示 -
class A {
static hasMany = [B] // Just trying to show my mapping
}
class B {
// This table doesn't belongs to A
}
现在我有一个A类对象,其中包含一组对象B.我想删除对象A及其与B的关联,但我不想删除对象B. < / p>
我尝试过cascade for delete,delete-all&amp; delete-all-orphan但它似乎试图从表B中删除不是我想要的相关记录。
这就是我现在正在做的事情 -
objectTypeB.each { b ->
a.removeFromB(b)
}
然后
a.delete()
但是收到错误
deleted object would be re-saved by cascade (remove deleted object from associations)
答案 0 :(得分:2)
你的例子几乎是正确的,我认为你需要的是告诉A存储B的集合(参见hasMany)
class A {
String name
static hasMany = [b: B]
}
class B {
String name
}
然后应该可以这样做(我在一个空白项目中尝试过,我的域也有一个String name属性):
def b1 = new B(name: 'b1').save(flush: true)
def b2 = new B(name: 'b2').save(flush: true)
def b3 = new B(name: 'b3').save(flush: true)
def a = new A(name: 'a')
a.addToB(b1)
a.addToB(b2)
a.save(flush: true)
def x = A.get(1)
println x.b
x.delete(flush: true)
assert A.count() == 0
由于B与A之间没有关系,因此在删除A之前无需从A中删除b。如果需要,我可以向您发送我的代码片段