由于模糊的def递归导致的堆栈溢出

时间:2011-10-10 11:32:00

标签: grails groovy gorm

这是一个非常奇怪的问题。

我在两个类之间有多对多的关系,Subscription&场景。当我们在每个类中使用“beforeDelete”删除它们时,我正试图删除它们之间的关系。

ScenarioSubscription是表示联结表的类。

这就是我的beforeDelete def在Scenario中的样子。

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

它适用于Subscription类,但不适用于Scenario。相反,当调用* .delete()时,递归调用“beforeDelete”def。我在调试时检查了变量,sceSub是ScenarioSubscription的列表。疯了?!

非常感谢任何有关正在发生的事情的想法。

1 个答案:

答案 0 :(得分:2)

因此,听起来您的ScenarioSubscription域对象有两个属性,ScenarioSubscription。当您尝试删除链接域对象时,它会尝试将删除级联到Scenario,这会触发beforeDelete关闭(并重复直到崩溃)

我认为您需要为ScenarioSubscription属性定义custom cascade mapping,或者,您无法为此Scenario域对象定义自定义映射,并删除你的beforeDelete完全?

即:

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

This question也可能有所帮助