वर्तमान में, MongoDB के लिए GORM dirtyPropertyNames
में सही मान नहीं देता है खेत। तो आपको डोमेन इंस्टेंस यानी $changedProperties
में एक और निचले स्तर के इंजेक्शन वाले फ़ील्ड का उपयोग करना होगा ।
लेकिन, $changedProperties
. में भी एक समस्या है भले ही आप किसी फ़ील्ड को समान मान से बाँधते हों, $changedProperties
इसकी एंट्री होगी। तो आप अपने कोड को काम करने के लिए इसे इस तरह थोड़ा और बदल सकते हैं:
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"
}
}
}
}
}
}
}