Grails更新数据库行异常

时间:2013-05-27 06:44:45

标签: grails

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

发送电子邮件后发出错误。

1 个答案:

答案 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,这就是您遇到问题的原因。