帮助解决错误org.hibernate.StaleObjectStateException

时间:2011-08-05 04:25:12

标签: hibernate grails gorm

请帮我解决这个错误。它有时会在其他时候出现。我知道它是因为并发请求但如何克服它?我尝试过锁定而不是获取,但它没有用。

org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect):

我的代码是:

def principal = springSecurityService.principal
    if (principal instanceof String)
        return null
    else {
        def user = NayaxUser.get(principal.id)
        user.merge()
        return user
    }

我也尝试过使用merge,但似乎没什么帮助..有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我注意到的一件事是你的代码

user.merge()
return user

似乎有问题,因为正如http://grails.org/doc/latest/ref/Domain%20Classes/merge.html中指定的那样:

  

与save方法不同,此方法返回表示重新附加对象的类的新实例。 [...]如果您不使用merge方法的返回值,那么您仍然可以访问原始的分离实例,并且您将收到诸如延迟初始化异常之类的错误。

所以你的案例中的正确代码是

return user.merge()

但是,我不确定这是否能解决您的问题。