在grails中以一对多方式删除对象及其映射

时间:2015-01-26 04:16:22

标签: grails gorm

我有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)

1 个答案:

答案 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。如果需要,我可以向您发送我的代码片段