0

ドメインクラスのgetterとsetterを上書きしようとしています。これを行う理由は、コード内の非常に多くの場所にあるこのドメインクラスの初期化をやり直す必要がないようにするためです。

以前は「アドレス」が1つあったドメインクラス「銀行」があり、次のように初期化されました。new Bank(address:Address)

今、私は複数の住所が必要なので、マッピングクラスBankAddressがあり、BankにはBankAddressの「addresses」リストがあります。

初期化を同じ「newBank(address:Address)」に保つために、「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)
}

問題は、セッターが呼び出されている間、関数の'instance'パラメーターが空になり、保存に失敗することです--new Bank(address:someAddress):'AddressId'、table'someDB.Config.BankAddress'; 列はnullを許可しません。INSERTは失敗します。

なぜセッターは空の引数を持っているのですか?...私はgroovyとそのダイナミックな性質の初心者です

ご協力ありがとうございました

4

1 に答える 1

1

セッターでは、新しいBankAddressオブジェクトを作成してから、を実行していsave(flush:true)ます。オブジェクトのプロパティの1つBankAddressは、送信されたAddressオブジェクトです。送信されAddressたオブジェクトがまだデータベースに保存されていない場合、新しいBankAddressオブジェクトはデータベースの外部キー列にIDを保存しようとしますがnull、外部キー列はnull許容ではないため失敗します。

送信されたAddressオブジェクトがすでにデータベースに永続化されていることを確認して、プライマリキーIDを取得するか、新しいBankAddressオブジェクトの永続化を後で実行するまで遅らせます。

于 2012-08-30T21:05:44.557 に答える