addTo *没有设置回引用

时间:2015-05-18 08:48:47

标签: grails gorm

我有两个具有一对多关系的域类:

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 *方法设置的。但问题是为什么它被召唤得太晚以至于导致例外。

2 个答案:

答案 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()