2010-07-28 13 views
6

Jak należy usunąć obiekt podrzędny w stosunku hasOne w Grails dla np:ma jeden relacji i usunięcie w Grails

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

Próbowałem usunięcie obiektu podrzędnego przez dwa sposoby

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

Zawsze otrzymuję ten sam wyjątek Usunięto obiekt ponownie zapisany przez kaskadę w obie strony. I jeszcze jeden mam jakieś dynamiczne metody (jak addTo i removeFrom for hasMany) dla hasOne? Każda pomoc?

+0

Czy próbowano ustawienie face.nose = null; – Emyr

+0

Tak też to zrobiłem. Ale to nie ma sensu. Ciągle mam ten sam wyjątek. – prabhap

+1

Czy naprawdę potrzebujesz 'static belongsTo = Face'? –

Odpowiedz

0

Spróbuj dokonywania klasy następująco:

class Face { 
     Nose nose 
} 

class Nose {  
     static belongsTo = Face 
} 

Następnie usunąć spróbować:

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

Myślę, że Twarz nie powinna być usuwana tylko z Nosa. –

4

można spróbować

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

Jeśli tylko usunąć nos następnie własność twarz. nos wciąż jest ustawiony. Późniejsze wywołanie face.save() spowoduje odratowanie nosa.

Jeśli ustawisz tylko face.nose = null (bez zapisywania), zmiana nie zostanie zapisana w bazie danych. Późniejsza kwerenda do bazy danych, aby uzyskać twarz, dałaby Ci twarz z nosem, a save() ją przywrócił.

-1

spróbować

noseId = face.nose.id 
face.nose = null 
nose.get(noseId).delete(flush:true) 
Powiązane problemy