【发布时间】:2015-11-23 07:55:46
【问题描述】:
我有一个 User 类,它有很多组织,组织是字符串 UID。
class User implements Serializable {
...
List organizations
static hasMany = [organizations: String]
...
}
要更新用户实例,我需要在添加更新后的 uid 之前从“组织”中删除所有字符串,但它不起作用。在我删除它们并保存用户实例后,相同的组织将重新保存到集合中。
我尝试了很多方法:
// 1
user.organizations.clear()
// 2
def orgsToDelete = [] // this is to avoid concurrent modification exception
orgsToDelete += user.organizations
orgsToDelete.each { orguid ->
user.removeFromOrganizations(orguid)
}
在 1 或 2 之后,user.organizations 为空,但当我这样做时:
user.save(flush:true)
我得到了与 clear/removeFromOrganizations 之前相同的组织
我不能做 user.organizations.each { it.delete() } 因为项目不是域类而是字符串。
另一个奇怪的事情是我有一个自定义验证器来检查集合是否有任何项目,并且它似乎没有收到任何错误,如果组织是空的,这是我的验证器:
organizations validator: { val, obj ->
if (obj.organizations.size() == 0) return false
return true
}
当我对控制器更新操作执行此操作时,它显示 hasErrors() == false
if (userInstance.hasErrors())
{
println "has errors"
respond userInstance.errors, view:'edit'
return
}
有什么想法吗?
【问题讨论】:
标签: grails