नियंत्रक तर्क:कैसे जेपीए साथ StaleObjectStateException को ठीक करने और हाइबरनेट को
def updateObject() {
Object o = Object.get(params.id as Long)
o.otherObjects.clear()
objectDataService.saveObject(o.id)
OtherObject newObject = new OtherObject;
o.addToOtherObjects(newObject)
objectDataService.saveObject(o.id)
}
ServiceLogic
def saveObject(long profileId) {
o.save(flush:true)
}
क्या मामलों यह सिर्फ काम करेंगे के 90% में
होता है।
समस्याओं
ERROR errors.GrailsExceptionResolver - StaleObjectStateException occurred when processing request: [GET] /controller/updateObject - parameters:
stuff[]: data
Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [com.path.Object#1].
Stacktrace follows:
Message: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [com.path.Object#1]
मैं संबंधित प्रश्नों के माध्यम से पढ़ सकते हैं और merge
कॉल ऊपर दिखने वाला मिल गया है। इसने लगभग 50% मामलों को हल किया लेकिन सभी नहीं।
यदि आप इस तर्क को सेवा विधि में ले गए हैं तो क्या आप यहां बेहतर नहीं होंगे, तो यह सब एक ही लेनदेन के तहत किया गया था? –
मैं सेवा अधिभारित नहीं करना चाहता हूं। क्या आपको लगता है कि यह समझ में आता है? –
व्यापार तर्क को सेवाओं में स्थानांतरित करना और जितना संभव हो उतना पतला बनाना जितना संभव है (पतली से मेरा मतलब कोड की कम पंक्तियों के साथ है)। यह आपको आवश्यकतानुसार कोड का पुन: उपयोग करने में मदद करेगा और परीक्षण में भी बहुत समय बचाएगा। –