Переполнение стека в граалях, вызванное неясной рекурсией def - PullRequest
1 голос
/ 10 октября 2011

это довольно странная проблема.

У меня есть отношение многие ко многим между двумя классами: подписка и сценарий.Дело в том, что я пытаюсь удалить отношение между ними, когда любой из них удаляется с использованием «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)       
}

Он работает в классе подписки, но не в сценарии.Вместо этого при вызове * .delete () def «beforeDelete» вызывается рекурсивно.Я проверил переменную при отладке, и scenSub - это список ScenarioSubscription.Сумасшедший?!

Любая идея о том, что происходит, очень ценится.

1 Ответ

2 голосов
/ 10 октября 2011

Итак, ваш доменный объект ScenarioSubscription имеет два свойства, Scenario и Subscription.Когда вы пытаетесь удалить объект домена ссылки, он пытается каскадно удалить его до Scenario, которое вызывает закрытие beforeDelete (и повторяется до сбоя)

Я думаю, вам нужно определить настраиваемое каскадное сопоставление для ваших ScenarioSubscription свойств, или вы не можете определить настраиваемое сопоставление для этого Scenario объекта домена и полностью избавиться от beforeDelete?то есть:

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

Этот вопрос также может помочь

...