查找子元素的isDirty()

时间:2016-12-14 00:32:57

标签: grails grails-domain-class grails3 beforeupdate grails3.2.0

我正在使用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关联。我该怎么办呢?

1 个答案:

答案 0 :(得分:2)

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

PersistentCollection接口有一个isDirty()方法,您可以使用该方法检查关联是否已更改。如下所示:

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

会这样做。