grails - 查找子元素的 isDirty()

标签 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 关联。我该如何处理?

最佳答案

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

PersistentCollection接口(interface)有一个isDirty()您可以使用该方法来检查关联是否已更改。所以类似:

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

会做。

关于grails - 查找子元素的 isDirty(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41132901/

相关文章:

grails - 有没有办法将 Grails 数据源注入(inject) logback.groovy 以便与 DBAppender 一起使用?

grails - 在groovyx.net.http.HTTPBuilder上设置其他超时

grails - 类型与 I18N 标签而不是属性名称不匹配

json - 将对象和值呈现为JSON作为Ajax响应

grails - 是否仅对测试数据覆盖Grails dateCreated和lastUpdated?

hibernate - 在 bootstrap 中拉取域映射并修改 Grails

grails - Grails:单击超链接上的继承参数

grails - 在 grails 中建模多对一树

grails - Grails 3更改默认服务范围

angular - 如何使用grails 3和angular创建Web应用程序?