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

标签 grails groovy gorm

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

在订阅和方案这两个类之间,我有很多对很多的关系。问题是,当在每个这些类中使用“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域对象具有两个属性ScenarioSubscription。当您尝试删除链接域对象时,它将尝试将删除级联到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/

相关文章:

grails - 在Grails中向客户端渲染响应后如何执行代码?

macos - IntelliJ迫使我在每次代码更改时都重新启动我的应用程序

java - PDFormX对象处理

Groovy 执行复杂的 shell 命令

hibernate - Grails刷新:在Domain.withTransaction {}闭包内部为true

java - 在 Groovy 中模拟 HttpClient

apache - 如何使用代理和虚拟主机将 session 从 apache2 传递到 tomcat7

groovy - Logback.groovy LogstashEncoder 更改字段名称

hibernate - HQL在具有and max的情况下产生意外的AST节点

grails - Grails GORM中的单向M:M