2013-01-22 44 views
1

我无法将保存级联到我的对象层次结构中。以下是我的对象层次结构的代码。Grails/GORM不通过整个对象层级保存级联保存

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 
} 

的valueService是简单地创建正确的值类型(字符串,布尔,INT等),一个大的switch语句的服务。

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

上述代码正确地创建了所有对象,但未能保存值对象。实体和属性被保存,但值不是。我是否缺少一些需要级联到值对象的标识符?

+0

由于Value属于ValueProcessor,并且您没有设置可能是原因的processor.value。 保存后试试println e.errors,看看是否有一些验证错误。 – uchamp

+0

我在setValue方法中设置了processor.value,并将它配置为在验证错误时失败。它不会失败,只是不保存价值。 – bdbull

+0

很难说,当你摆脱了Grails的惯例时,可能很难调试 –

回答

2

想通了。显然Grails动态制定者有一些魔力。我将setValue(val)方法更改为set(val)并开始工作。获得的经验:不要超越Grails的动态添加方法,因为它们是用魔法,像素灰尘和独角兽尿液建造的。

相关问题