我有以下一对一的双向关系:
class Face {
static hasOne = [nose: Nose]
}
class Nose {
static belongsTo = [face: Face]
}
我的集成测试中也有以下内容。
void testSomething() {
Face face = new Face()
Nose nose = new Nose()
face.nose = nose
face.save()
}
有没有办法给脸换个新鼻子?我已经用尽了尝试的想法。他们都没有工作
我试着给这张脸换个新鼻子。
face.nose = new Nose()
face.save()
但这没有用。所以我想也许我必须先删除旧鼻子(以防止多个鼻子属于同一张脸)。
nose.delete()
face.nose = new Nose()
face.save()
我什至尝试使用可更新属性。
class Face {
static hasOne = [nose: Nose]
static mapping = {
nose updateable: true
}
}
和可为空的属性。
class Nose {
static belongsTo = [face: Face]
static mapping = {
face nullable: true
}
}
没有任何效果。唯一有效的是创造一个全新的面孔,我不想这样做。假设 Face 模型有很多属性,而我只想更改其中的一个。为此,我必须将所有旧属性复制到新的 Face 中,然后更改它。为什么我不能只做 face.nose = new Nose()?
2013 年 11 月 12 日更新
以下是我想要的:
class Face {
Nose nose
}
class Nose {
static belongsTo = [face: Face]
}
有了这个,我可以改变脸上的鼻子。有趣的是,它也可以做第一个配置可以做的所有事情。也就是说,它们都可以进行级联保存和从面部到鼻子的删除。
void testCascadingSavesAndDeletesFromFaceToNose() {
assert Face.count() == 0
assert Nose.count() == 0
Face face = new Face(nose: new Nose())
assert face.save() != null
assert Face.count() == 1
assert Nose.count() == 1
face.delete()
assert Face.count() == 0
assert Nose.count() == 0
}
他们还可以获得有关关系另一方的信息。
void testSimpleSave() {
Face face = new Face()
Nose nose = new Nose()
face.nose = nose
face.save()
println "face = ${face}"
println "nose = ${nose}"
println "face.nose = ${face.nose}"
println "nose.face = ${nose.face}"
}