我有两个具有一对多关系的域类:
class DataType {
Integer id
...
static hasMany = [dataTypeProps: DataTypeProp]
}
class DataTypeProp implements Serializable {
String name
String value
static belongsTo = [dataType: DataType]
int hashCode() {
def builder = new HashCodeBuilder()
builder.append dataType.id
builder.append name
builder.toHashCode()
}
}
然后我创建一个新的DataType
实例,并像这样添加一个属性:
new DataType().
addToDataTypeProps(name: 'test name', value: 'test value')
.save()
我收到NullPointerException,因为尚未设置对DataType
的后向引用。
java.lang.NullPointerException: Cannot get property 'id' on null object
at de.marketmaker.dm.treasury.model.DataTypeProp.hashCode(DataTypeProp.groovy:13)
at java_util_Set$add$2.call(Unknown Source)
at Script1$_run_closure1$_closure3$_closure4.doCall(Script1.groovy:22)
Gorm文档说后面引用是由addTo *方法设置的。但问题是为什么它被召唤得太晚以至于导致例外。
答案 0 :(得分:0)
我刚刚做了同样的设置,没有问题!我可以想到你应该尝试的两件事。
1)将属性名称 id 更改为其他内容,GORM为您免费提供其中一个。和,
2)投诉很明显,将孩子添加到尚未在数据库中定居的父母。因此,声明并保存父级,然后按照您拥有的方式将子级添加到hasMany属性。你不能得到 null 。
答案 1 :(得分:-1)
new DataType(
dataTypeProps: [
new DataTypeProp(name: 'test name1', value: 'test value1'),
new DataTypeProp(name: 'test name2', value: 'test value2')
]
).save()