我正在使用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关联。我该怎么办呢?
答案 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()) {
...
}
会这样做。