我有一个Grails应用程序,我从Grails 3.2.8升级到Grails 3.3.3。我使用Spring安全插件,并有一个编辑用户角色的页面。
在用户角色更新过程中,我首先删除所有角色,然后添加所选角色。这适用于Grails 3.2.8,但是使用Grails 3.3.3我在添加所选角色期间获得了org.grails.datastore.mapping.validation.ValidationErrors(现有角色错误),当页面呈现完成时,所有角色都消失了(因为删除所有角色但由于现有角色错误而未添加新角色)
这是因为新的冲洗行为吗?任何帮助,将不胜感激。
@Transactional
def updatepermission(User userInstance) {
if (userInstance == null) {
notFound()
return
}
UserRole.removeAll(userInstance)
params.authorities.each { roleId ->
UserRole.create(userInstance, Role.get(roleId))
}
springSecurityService.clearCachedRequestmaps()
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.updated.message', args: [message(code: 'user.label', default: 'User'), userInstance.id])
redirect(controller: "user", action: "permission", id: userInstance.id)
return //new ModelAndView("/user/info/"+userInstance.id, [userInstance: userInstance])
}
'*' { respond userInstance, [status: OK] }
}
}
UserRole类是Spring安全性生成的类,给出错误的方法是:
static UserRole create(User user, Role role, boolean flush = false) {
def instance = new UserRole(user: user, role: role)
instance.save(flush: flush)
instance
}
Grails 3.3.3 with hibernate-core.5.1.5.Final。错误是:
引起:org.springframework.dao.DuplicateKeyException:具有相同标识符值的另一个对象已与会话关联: