2010-07-28 28 views
6

我應該如何刪除子對象,在Grails的一個hasOne關係 爲如一對一的關係,並刪除:通過兩種方式在Grails的

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

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

我試圖刪除子對象我總是通過兩種方式獲得相同的異常已刪除對象級聯重新保存。還有一個我hasOne的動態方法(如hasMany的addTo和removeFrom)? 有什麼幫助嗎?

+0

你有沒有嘗試設置face.nose = NULL; – Emyr 2010-07-28 08:54:03

+0

是的,也是。但它是沒用的..我得到同樣的例外 – prabhap 2010-07-28 09:04:45

+1

你真的需要'static belongsTo = Face'嗎? – 2010-07-28 11:35:34

回答

0

儘量使你的類如下:

class Face { 
     Nose nose 
} 

class Nose {  
     static belongsTo = Face 
} 

然後刪除嘗試:

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

我認爲臉部不應該只刪除鼻子。 – 2010-07-30 14:24:42

4

你可以嘗試

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

如果你只是刪除鼻子則該屬性的臉。鼻子仍然設置。稍後調用face.save()將重新保存鼻子。

如果您只設置face.nose = null(不保存),則更改不會保存到數據庫。稍後對數據庫進行查詢以獲取Face會給你一個帶有鼻子設置的Face,並且一個save()會重新保存它。

-1

試試這個

noseId = face.nose.id 
face.nose = null 
nose.get(noseId).delete(flush:true)