0

我正在尝试覆盖域类的 getter 和 setter。这样做的理由是,我不必重做这个域类的初始化,它在代码中的很多地方。

我有一个域类“银行”,它曾经有一个“地址”,它的初始化如下:新银行(地址:地址)

现在,我需要多个地址,所以我有一个映射类 BankAddress 和 Bank 现在有 BankAddress 的“地址”列表

为了保持初始化相同的“新银行(地址:地址)”,我正在重写“getAddress”和“setAddress”,如下所示:

Address getAddress(){
    if(addresses?.size()>0){
        addresses.asList().get(0).getAddress()
    }else{
       return null
    }
}   

void setAddress(Address instance){
    if(addresses?.size()>0){
        addresses*.delete()
        addresses.clear()
    }

    def bankAddress = new BankAddress(address: instance, bank: this, isPrimary: true).save(flush: true)
    addToAddresses(bankAddress)
}

问题是,当我的设置器被调用时,函数的“实例”参数为空,导致保存失败 - new Bank(address:someAddress): 'AddressId', table 'someDB.Config.BankAddress'; 列不允许空值。插入失败。

为什么 setter 有空参数?...我是 groovy 及其动态特性的新手

谢谢您的帮助

4

1 回答 1

1

In your setter you're creating a new BankAddress object and then doing a save(flush:true). One of the properties of your BankAddress object is the submitted Address object. If the submitted Address object hasn't been saved to the database already, the new BankAddress object will try to save a null id in its foreign key column in the database, which will fail because the foreign key column is not nullable.

Make sure your submitted Address object has already been persisted to the database so it has a primary key id, or delay persisting the new BankAddress object until later.

于 2012-08-30T21:05:44.557 回答