имеет одно отношение и удаление в Grails - PullRequest
6 голосов
/ 28 июля 2010

Как мне удалить дочерний объект в отношении hasOne в граалях например ,:

class Face {
 static hasOne = [nose: Nose]
}
class Nose {
 Face face
 static belongsTo= Face
}

Я попытался удалить дочерний объект двумя способами

1. face.nose.delete()
2. nose.delete()

Я всегда получаю одно и то же исключение. Удаленный объект восстанавливается каскадом в обоих направлениях. И еще у меня есть какие-нибудь динамические методы (например, addTo и removeFrom для hasMany) для hasOne? Любая помощь?

Ответы [ 3 ]

4 голосов
/ 30 июля 2010

Вы можете попробовать

face.nose = null
face.save()
nose.delete()

Если вы удалите только нос, свойство face.nose все еще будет установлено.Более поздний вызов face.save () восстановит нос.

Если вы установите только face.nose = null (без сохранения), то изменения не сохраняются в базе данных.Более поздний запрос к базе данных для получения Face даст вам Face с установленным носом, а save () сохранит его.

0 голосов
/ 07 июля 2015

попробуйте

noseId = face.nose.id
face.nose = null
nose.get(noseId).delete(flush:true)
0 голосов
/ 28 июля 2010

Попробуйте сделать свой класс следующим образом:

class Face {
        Nose nose
}

class Nose {    
        static belongsTo = Face
}

Затем удалить попробуйте:

def f = Face.get(1)
f.nose.delete()
f.delete()
...