这是一个非常奇怪的问题。
在订阅和方案这两个类之间,我有很多对很多的关系。问题是,当在每个这些类中使用“beforeDelete”删除其中一个时,我正在尝试删除它们之间的关系。
ScenarioSubscription是代表联结表的类。
这就是我的beforeDelete定义在方案中的样子。
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。我在调试时检查了变量,并且scenSub是ScenarioSubscription的列表。疯?!
非常赞赏发生了什么。
最佳答案
因此,听起来您的ScenarioSubscription
域对象具有两个属性Scenario
和Subscription
。当您尝试删除链接域对象时,它将尝试将删除级联到Scenario
,从而触发beforeDelete
关闭(并重复执行直到崩溃)
我认为您需要为自己的ScenarioSubscription
属性定义一个custom cascade mapping,或者是否不能为该Scenario
域对象定义一个自定义映射,并完全摆脱beforeDelete
?
即:
static mapping = {
subscriptions cascade:"all-delete-orphan"
}
This question也可能有帮助
关于grails - 由于模糊的def递归导致的grails中的堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7712136/