I'm using Grails 3.2:
class Training{
boolean clientChanged = false
static transients = ['clientChanged']
static hasMany = [clients:User]
//...
def beforeUpdate(){
clientChanged = this.isDirty('clients')
}
def afterUpdate(){
if(clientChanged && section.clients)
numberOfAbsentClients = section.clients.size() - (clients.size()?:0)
}
}
isDirty()
is not working for hasMany associations. how can I handle it?
Collections are handled slightly differently. Depending on whether you are using Hibernate or one of the other implementations of GORM you need to check if the collection is a
org.hibernate.collection.spi.PersistentCollection
(for Hibernate) or aorg.grails.datastore.mapping.collection.PersistentCollection
(for MongoDB/Neo4j/etc)The
PersistentCollection
interface has aisDirty()
method that you can use to check if the association was changed. So something like:Will do it.