在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。如果你想要,我可以把我的代码片段发给你
我有 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。如果你想要,我可以把我的代码片段发给你