我正在编写一个小的Grails应用程序,并且在运行以下相当简单的代码时,我一直在获取StaleObjectStateException:s约为“createfoo”调用次数的1/10:th。我很可能错过了使用GORM的最佳方式。Grails中的GORM和StaleObjectStateException
这是代码:
def viewfoo = {
session.user.refresh()
// ...
}
def createfoo = {
session.user.refresh()
var user = session.user
if (param["name"]) {
var newFoo = new Foo()
newFoo.name = param["name"]
if (newFoo.validate()) {
newFoo.save()
if (user.validate()) {
user.addToFoos(newFoo)
} else {
user.discard()
}
} else {
newFoo.discard()
}
}
}
我的问题关于格姆最佳实践:
就是“如果-的validate() - 然后保存() - 否则放弃() “在GORM中坚持一个新对象的正确方法是什么?
我应该验证我要保存的所有对象()吗?即我应该在上面的代码中验证Foo对象和用户对象吗?将验证用户对象隐式检查Foo对象的状态?
我做了什么值得StaleObjectStateException? :-)
的格姆/休眠例外:
Caused by: Object of class [Foo] with identifier [15]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [Foo#15]