MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

DirtyPropertyNames-Eigenschaftswerte für Assoziationsfelder in Grails können nicht abgerufen werden

Derzeit gibt GORM für MongoDB keine korrekten Werte in den dirtyPropertyNames aus aufstellen. Sie müssen also ein anderes eingefügtes Feld auf niedrigerer Ebene in der Domäneninstanz verwenden, z. B. $changedProperties .

Aber es gibt auch ein Problem mit den $changedProperties dass selbst wenn Sie ein Feld mit demselben Wert binden, die $changedProperties wird einen Eintrag dafür haben. Sie können es also etwas mehr optimieren, damit Ihr Code funktioniert:

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