我正在使用 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/