sql >> Base de Datos >  >> NoSQL >> MongoDB

No se pueden obtener los valores de las propiedades de los nombres de propiedad sucios para los campos de asociación en griales

Actualmente, GORM para MongoDB no proporciona valores correctos en dirtyPropertyNames campo. Por lo tanto, debe usar otro campo inyectado de nivel inferior en la instancia del dominio, es decir, $changedProperties .

Pero también hay un problema con $changedProperties que incluso si vincula un campo con el mismo valor, $changedProperties tendrá una entrada para ello. Así que puedes modificarlo un poco más así para que tu código funcione:

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"
                        }
                    }
                }
            }
        }
    }
}