为子元素查找 isDirty()

Find isDirty() for children elements

我正在使用 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() 不适用于 hasMany 关联。我该如何处理?

集合的处理方式略有不同。根据您使用的是 Hibernate 还是 GORM 的其他实现之一,您需要检查集合是 org.hibernate.collection.spi.PersistentCollection(对于 Hibernate)还是 org.grails.datastore.mapping.collection.PersistentCollection(对于 MongoDB/Neo4j/etc)

PersistentCollection 界面有一个 isDirty() 方法,您可以使用它来检查关联是否已更改。所以像:

 if(clients instanceof PersistentCollection && clients.isDirty()) { 
     ...
 }

会的。