Skip to content

GPMONGODB-68: def beforeDelete() that does a findBy* throws StackOverflowException #502

@graemerocher

Description

@graemerocher

Original Reporter: oct
Environment: Linux 64bi, Grails 1.3.7
Version: 1.0.0.M6
Migrated From: http://jira.grails.org/browse/GPMONGODB-68

This started to happen in M6 version, M5 does not have this issue.

{code}
[User.groovy]
package gello

import org.bson.types.ObjectId

class User {
ObjectId id
String name
// Settings settings

static mapWith = "mongo"

def beforeDelete() {
Settings.withNewSession {
def us = Settings.findByUser(id)
if (us) {
us.delete(flush:true)
log.debug "Deleting user settings for ${name}"
}
}
}
}

[Settings.groovy]
package gello

import org.bson.types.ObjectId

class Settings {
ObjectId id

static belongsTo=[user:User]

Boolean a
Boolean b

static mapWith = "mongo"
}

[MongoUsageTest.groovy]
package gello

import grails.test.*

class MongoUsageTests extends GroovyTestCase {

void test_user_settings() {
def u = new User(name:'gunit', settings:new Settings()).save(failOnError:true, flush:true)
assertNotNull u

  def u2 = User.get(u.id)
  assertNotNull u2

  u2.delete(flush:true)

  def u3 = User.get(u.id)
  assertNull u3

}
}

[Error]
java.lang.StackOverflowError
at org.grails.datastore.gorm.events.DomainEventListener.invokeEvent(DomainEventListener.java:194)
at org.grails.datastore.gorm.events.DomainEventListener.beforeDelete(DomainEventListener.java:136)
at org.grails.datastore.gorm.events.DomainEventListener.onPersistenceEvent(DomainEventListener.java:92)
at org.grails.datastore.gorm.finders.AbstractFindByFinder.invokeQuery(AbstractFindByFinder.java:34)
at org.grails.datastore.gorm.finders.AbstractFindByFinder$1.doInSession(AbstractFindByFinder.java:26)
at org.grails.datastore.gorm.finders.AbstractFinder.execute(AbstractFinder.java:36)
at org.grails.datastore.gorm.finders.AbstractFindByFinder.doInvokeInternal(AbstractFindByFinder.java:23)
at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:137)
at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:284)
at org.grails.datastore.gorm.finders.FinderMethod$invoke.call(Unknown Source)
at org.grails.datastore.gorm.GormStaticApi.methodMissing(GormStaticApi.groovy:91)
at org.grails.datastore.gorm.StaticMethodInvokingClosure.call(GormEnhancer.groovy:266)
at gello.User$_beforeDelete_closure1.doCall(User.groovy:17)
at org.grails.datastore.gorm.GormStaticApi.withNewSession(GormStaticApi.groovy:557)
at org.grails.datastore.gorm.StaticMethodInvokingClosure.call(GormEnhancer.groovy:266)
at gello.User.beforeDelete(User.groovy:16)
at org.grails.datastore.gorm.events.DomainEventListener.invokeEvent(DomainEventListener.java:194)
at org.grails.datastore.gorm.events.DomainEventListener.beforeDelete(DomainEventListener.java:136)
at org.grails.datastore.gorm.events.DomainEventListener.onPersistenceEvent(DomainEventListener.java:92)
at org.grails.datastore.gorm.finders.AbstractFindByFinder.invokeQuery(AbstractFindByFinder.java:34)
at org.grails.datastore.gorm.finders.AbstractFindByFinder$1.doInSession(AbstractFindByFinder.java:26)
at org.grails.datastore.gorm.finders.AbstractFinder.execute(AbstractFinder.java:36)
at org.grails.datastore.gorm.finders.AbstractFindByFinder.doInvokeInternal(AbstractFindByFinder.java:23)
at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:137)
at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:284)
at org.grails.datastore.gorm.finders.FinderMethod$invoke.call(Unknown Source)
at org.grails.datastore.gorm.GormStaticApi.methodMissing(GormStaticApi.groovy:91)
at org.grails.datastore.gorm.StaticMethodInvokingClosure.call(GormEnhancer.groovy:266)
at gello.User$_beforeDelete_closure1.doCall(User.groovy:17)
at org.grails.datastore.gorm.GormStaticApi.withNewSession(GormStaticApi.groovy:557)
at org.grails.datastore.gorm.StaticMethodInvokingClosure.call(GormEnhancer.groovy:266)
at gello.User.beforeDelete(User.groovy:16)
at org.grails.datastore.gorm.events.DomainEventListener.invokeEvent(DomainEventListener.java:194)
at org.grails.datastore.gorm.events.DomainEventListener.beforeDelete(DomainEventListener.java:136)
at org.grails.datastore.gorm.events.DomainEventListener.onPersistenceEvent(DomainEventListener.java:92)
at org.grails.datastore.gorm.finders.AbstractFindByFinder.invokeQuery(AbstractFindByFinder.java:34)
at org.grails.datastore.gorm.finders.AbstractFindByFinder$1.doInSession(AbstractFindByFinder.java:26)
at org.grails.datastore.gorm.finders.AbstractFinder.execute(AbstractFinder.java:36)
at org.grails.datastore.gorm.finders.AbstractFindByFinder.doInvokeInternal(AbstractFindByFinder.java:23)
at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:137)
at org.grails.datastore.gorm.finders.DynamicFinder.invoke(DynamicFinder.java:284)
at org.grails.datastore.gorm.finders.FinderMethod$invoke.call(Unknown Source)
at org.grails.datastore.gorm.GormStaticApi.methodMissing(GormStaticApi.groovy:91)
at org.grails.datastore.gorm.StaticMethodInvokingClosure.call(GormEnhancer.groovy:266)
at gello.User$_beforeDelete_closure1.doCall(User.groovy:17)
at org.grails.datastore.gorm.GormStaticApi.withNewSession(GormStaticApi.groovy:557)
at org.grails.datastore.gorm.StaticMethodInvokingClosure.call(GormEnhancer.groovy:266)
at gello.User.beforeDelete(User.groovy:16)
{code}

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions