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

Deleting the object and its mapping in one-to-many in grails

我有 2 个域 class 如下 -

class A {
   static hasMany = [B] // Just trying to show my mapping
}

class B {
   // This table doesn't belongs to A
}

现在我有一个对象 class A,其中包含一组对象 B。我想删除对象 A 及其与 B 的关联,但我不想删除对象 B.

我尝试过级联删除、删除所有和删除所有孤儿,但它似乎试图从 table B 中删除相关记录,这不是我想要的。

这就是我现在正在做的事情 -

objectTypeB.each { b ->
     a.removeFromB(b)
}

然后

a.delete()

但出现错误

deleted object would be re-saved by cascade (remove deleted object from associations)

你的例子几乎是正确的,我想你需要的是告诉 A 将 B 存储在什么集合中(参见 hasMany)

class A {
    String name
    static hasMany = [b: B]
}
class B {
    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。如果你想要,我可以把我的代码片段发给你