bdbull
bdbull

Reputation: 188

Grails/GORM not cascading save through entire object hierarchy

I'm having trouble getting saves cascaded down my object hierarchy. Below is the code of my object hierarchy.

class Entity {
    static hasMany = [attributes: Attribute]
}

class Attribute extends ValuePossessor {
    static belongsTo = Entity
}

abstract class ValuePossessor {
    def valueService
    Value value
    void setValue(val) {
        this.value = valueService.Create(val)
        this.value.possessor = this
    }
}

abstract class Value {
    static belongsTo = [possessor: ValuePossessor]
}

class StringValue extends Value {
    String value
}

The valueService is simply a service with a big switch statement that creates the correct value type (string, boolean, int, etc.).

Entity e = new Entity()
Attribute attr = new Attribute()
attr.setValue(1)
e.addToAttributes(attr)
e.save()

The above code correctly creates all objects, but fails to save the value object. The entity and attribute are saved, but the value is not. Am I missing some identifier needed to cascade all the way down to the value object?

Upvotes: 1

Views: 1334

Answers (1)

bdbull
bdbull

Reputation: 188

Figured this out. Apparently there is some magic in the grails dynamic setters. I changed the setValue(val) method to set(val) and it started working. Lesson learned: don't override grails' dynamically added methods because they are built with magic, pixy dust, and unicorn urine.

Upvotes: 2

Related Questions