2012-02-07 14 views
17

अगर मैं Grails कंसोल में इस कोड को निष्पादित करें:GORM मेरी ऑब्जेक्ट को क्यों नहीं सहेज रहा है?

def p = new Post(title: "T"); 
p.save(flush: true); // or p.save(); 

Post.count(); 

GORM किसी भी अपवाद फेंक नहीं है, लेकिन डेटा मेरी DB में सहेजा नहीं गया है। मैं क्या गलत कर रहा हूं?

+0

करने के लिए मेरे मामले में से व्यवहार विश्व स्तर पर बदलने की जरूरत है मैं कोड का एक और हिस्सा है कि मेरी पंक्ति को हटाने गया था , नया बनाने के बाद ... :( – Topera

उत्तर

30

ऐसा लगता है कि आपके पास बाधा उल्लंघन है। अपने सहेजने के तरीके पैरामीटर में failOnError: true जोड़ें। फिर आपकी सहेजने में विफल होने पर आपको अपवाद मिलेगा। (वैकल्पिक रूप से आप वापसी मूल्य को सहेजने से देख सकते हैं, और यदि यह p.errors.allErrors() पर झूठा प्रिंट प्रिंट कर सकता है।)

प्रमाणीकरण और बचत एक साथ की जाती है। यदि आप उपयोगकर्ता द्वारा सबमिट किए गए डेटा को मान्य कर रहे हैं जो कि कुछ डोमेन ऑब्जेक्ट से जुड़ा हुआ है, तो अमान्य इनपुट के कारण विफलता को सहेजने के लिए जांच करने के लिए बेवकूफ चीज़ को सहेजने का वापसी मूल्य जांचना है; अमान्य इनपुट के कारण असफल असाधारण व्यवहार नहीं है। यदि आप ऑब्जेक्ट की सामग्री को सहेजना चाहते हैं और कोई समस्या होने पर अपवाद फेंकना चाहते हैं, तो failOnError का उपयोग करें।

तर्क के बारे में अधिक जानकारी के लिए कि उन्होंने GORM क्यों डिज़ाइन किया ताकि आपको यह see this article करने की आवश्यकता हो।

+1

लिंक –

+0

लिंक के लिए +1 आप अपने डोमेन ऑब्जेक्ट पर 'validate()' का भी उपयोग कर सकते हैं, और यदि यह गलत लौटाता है तो उसे 'सेव()' विधि न कहें। इसके बजाय नियंत्रक को उपयोगकर्ता को एक संदेश वापस कर दें। –

+0

क्या होगा यदि मैं सेट विफल करेंऑनरर: सत्य और मुझे कोई अपवाद नहीं मिलता है, जबकि ऑब्जेक्ट को Grails द्वारा "unsaved" के रूप में चिह्नित किया जाता है? –

11

Post पर कुछ बाधाओं का उल्लंघन किया जा रहा है और इस प्रकार वस्तु को सहेजा नहीं जा रहा है। ध्यान दें कि GORM का डिफ़ॉल्ट व्यवहार विफल सहेजने पर फेंकना नहीं है। आप या तो इसे तरह

p.save(flush: true, failOnError: true); 

फोन या

grails.gorm.failOnError=true 

जोड़ने अपने Config.groovy

संबंधित मुद्दे