2011-04-08 116 views
1

我想知道是否有可能在沒有級聯刪除的情況下刪除雙向1:N關聯中的父對象。據如何防止雙向關聯級聯刪除?

http://grails.org/doc/1.0.x/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html

...在單向關係中的父最終被以「保存更新」和孩子一空結束映射。我已經嘗試了雙向關係的這些設置,但不是非常令人驚訝的是它不起作用。具體做法是:

class Personnel { 
    ... 
} 

static hasMany = [projectlead:Project, projectmanager:Project] 

static mappedBy = [projectlead:'leaddeveloper', projectmanager:'projectmanager'] 

static mapping = { 
    projectlead  cascade:'save-update' 
    projectmanager cascade:'save-update' 
} 

而這裏的項目類:

class Project { 
    ... 
} 
static belongsTo = [leaddeveloper:Personnel, projectmanager:Personnel] 

static mapping = { 
    leaddeveloper cascade:'none' 
    projectmanager cascade:'none' 
} 

我寧願不重新設計我的應用程序(通過從項目類刪除「屬於關聯」),如果有此一解決方案:從兩端進行導航訪問非常方便,我在項目結束時沒有太多實例。另外,如果有一種方法可以實現這一點,知道這些活動映射後會發生什麼,我可以將它們(或將它們設置)爲「null」爲例嗎?

讚賞此事的任何投入。

回答

2

通過閱讀你的問題,我認爲你想刪除「Personnel」對象,但保留他的「projects」不變。可悲的是,這與目前的實施無法完成。 「belongsTo」關係意味着每個子對象都必須有一個父對象。如果您刪除父母,孤兒也會被刪除。

另一個可以嘗試不用修改太多設計的選項是「標記爲已刪除」。在Personal中添加一個「已刪除」字段,如果您想刪除某人,只需將他標記爲已刪除。這將幫助您保存項目的歷史數據,即使在項目經理離開之後。

+0

嗨晃,非常感謝您的建議......我認爲這就是我要實現這一點! – sphere 2011-04-19 13:41:16