मैं एक छोटा Grails ऐप लिख रहा हूं, और मैं StaleObjectStateException: को लगभग 1/10 के लिए प्राप्त करता रहता हूं: निम्नलिखित सरल कोड चलाने पर "createfoo" पर कॉल के वें। शायद मैं गोर्म का उपयोग करने के लिए सबसे अच्छा तरीका याद कर रहा हूं।Grails और StaleObjectStateException में GORM
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()
}
}
}
मेरे सवालों का GORM सर्वोत्तम प्रथाओं के बारे में:
इस कोड है - उस समय बचाने के लिए() -
"यदि सत्यापित करें() है और कुछ-छोड़ें() "गोरम में एक नई वस्तु को जारी रखने का सही तरीका क्या है?
क्या मुझे उन सभी वस्तुओं को सत्यापित करना चाहिए जिन्हें मैं सहेजने वाला हूं()? अर्थात। क्या मुझे उपरोक्त कोड में फू-ऑब्जेक्ट और उपयोगकर्ता-ऑब्जेक्ट दोनों को मान्य करना चाहिए? उपयोगकर्ता-ऑब्जेक्ट को मान्य करने से फू-ऑब्जेक्ट की स्थिति की जांच हो जाएगी?
StaleObjectStateException के लायक होने के लिए मैंने क्या किया? :-)
GORM/हाइबरनेट अपवाद:
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]