2011-10-10 79 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可能的帮助,以及