我在Grails中具有以下简化模型:
DataBlock
由许多排序的ConfigPreset
对象组成。 在ConfigPreset中,我有
static belongsTo = [dataBlock: DataBlock]
并且DataBlock类包含:
List presets
static hasMany = [presets: ConfigPreset]
DataBlock() {
addToPresets(new ConfigPreset())
}
重载的构造函数返回:没有方法签名:[...]。addToPresets()适用于参数类型:(ConfigPreset)值:[ConfigPreset:null]。
但是为什么我的ConfigPreset实例为空?如果我尝试在例如创建一个DataBlock对象具有未修改ctor的BootStrap.groovy并对其调用addToPresets(...),它可以工作。
最佳答案
您的示例不起作用。
在static belongsTo = [dataBlock: DataBlock]
中指定ConfigPreset
意味着您必须先指定ConfigPreset
所有者,才能创建DataBlock
实例。
所以基本上下面的语句new ConfigPreset()
将始终返回null
new ConfigPreset(dataBlock: aDataBlock)
将返回一个有效的ConfigPreset
实例。addToXXX
方法基本上在执行以下操作:
this
实例在您的情况下,由于尚未创建
ConfigPreset
实例(您在构造函数中),因此无法创建DataBlock
(步骤1)。如果要在创建DataBlock时自动关联ConfigPreset,则可以使用Gorm Events,在beforeInsert事件中添加callbalck来实现。
或者,您可以删除
belongsTo
,然后new ConfigPreset()
将起作用。关于grails - Grails中的合成:构造函数中的addTo *,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2788163/