2011-10-10 66 views
1

這是一個很奇怪的問題。由於模糊def遞歸造成的grails堆棧溢出

我有兩個類之間的多對多關係,訂閱&方案。事情是我試圖刪除它們之間的關係,當在每個這些類中使用「beforeDelete」刪除它們時。

ScenarioSubscription是代表聯結表的類。

這就是我在場景中的beforeDelete def的樣子。

def beforeDelete = { 
    //Delete rows in junction table 
    def example = new ScenarioSubscription(scenarioId:id) 
    def scenSub = ScenarioSubscription.findAll(example) 
    scenSub*.delete(flush:true)  
} 

它適用於Subscription類,但不適用於方案。相反,當調用* .delete()時,遞歸調用「beforeDelete」def。調試時檢查了變量,scenSub是ScenarioSubscription的列表。瘋?!

對於發生什麼事情的任何想法都非常感謝。

回答

2

所以,這聽起來像你的ScenarioSubscription域對象有兩個屬性,ScenarioSubscription。當您嘗試刪除鏈接域對象,它會嘗試級聯刪除到其觸發的beforeDelete封閉的Scenario(和重複,直到崩潰)

我認爲你需要定義一個custom cascade mappingScenarioSubscription性質,或者,難道你不能爲這個域對象定義一個自定義映射,並完全擺脫你的beforeDelete

即:

static mapping = { 
    subscriptions cascade:"all-delete-orphan" 
} 

This question可能的幫助,以及