我正在編寫一個小的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]