MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Impossibile ottenere i valori delle proprietà di dirtyPropertyNames per i campi di associazione nei grail

Attualmente, GORM per MongoDB non fornisce valori corretti in dirtyPropertyNames campo. Quindi devi utilizzare un altro campo iniettato di livello inferiore nell'istanza del dominio, ad esempio $changedProperties .

Ma c'è anche un problema con $changedProperties che anche se si associa un campo con lo stesso valore, le $changedProperties avrà una voce per esso. Quindi puoi modificarlo un po' di più in questo modo per far funzionare il tuo codice:

def beforeUpdate() {
    def instance = this
    Map updatedFields = instance.$changedProperties

    updatedFields.each { name, value ->
        if (updatedFields[name] != instance[name]) {
            println "Field value $name is updated"
            if (name == "addresses") {
                // I've not run this for a long time, just confirm the old and new addresses values and swap the assignment of below lines
                List newAddresses = updatedFields[name]
                List oldAddresses = instance[name]

                newAddresses.each { address ->
                    if (!address.id) {
                        println "Got new address: $address.status"
                    } else {
                        Address oldAddress = oldAddresses.find { it.id == address.id }
                        if (!oldAddress) { // This is just an edge condition
                            println "Got new address: $address.status"
                        } else if (oldAddress.status != address.staus) {
                            println "$address status is updated to $address.status"
                        }
                    }
                }
            }
        }
    }
}