我正在使用grails,我有web application.in当调用更新用户配置文件,然后我有它的服务,其中我通过请求参数设置当前用户属性
user.properties = params (params-request parameters),
在我的用户域类中,我有onChange
方法(审计插件)。
因此,当控件转到用户域onChange
方法时,在将属性设置为用户配置文件后调用此方法时,它会给出错误
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.web.User#3].
我仍在寻找解决方案如何更新行。 提前谢谢。
//userController update method -
def user = User.get(params.id)
user.properties = params
user.save(flush:true)
//and in user domain onChange method-
def onChange = { oldMap,newMap ->
try{
Msg.append("Your profile has been updated successfully with the following changes: ");
oldMap.each({ key, oldVal ->
if(oldVal != newMap[key]) {
if(key =="firstName" || key =="gender" || key =="lastName" || key =="phoneNo" || key =="city"){
Msg.append(" * $key changed from $oldVal to " + newMap[key])
}
}
sendMail(Msg,newMap.email)
})
}
}
发送电子邮件后发出错误。
答案 0 :(得分:0)
我认为如果您尝试在用户对象上设置所有字段,那么它将起作用:
def user = User.get(params.id)
user.refresh()
user.firstName= params.firstName
user.lastName= params.lastName
user.gender= params.gender
user.phno= params.phno
user.city= params.city
if(user.save(flush:true, failOnError:true)){
// Now send success email
}
现在应该可以了。
我认为你的params地图有id属性和设置
user.properties = params
它会尝试为用户对象设置ID,这就是您遇到问题的原因。