मेरे पास एक Grails सेवा है जो लेनदेन के रूप में चिह्नित है और यह बहुत सी चीजें करता है।Grails लेनदेन के मुद्दे
मैं इस विधि में कोड जोड़ने कर रहा हूँ और परिणाम है कि मैं उम्मीद जब मैं इसके माध्यम से कदम नहीं मिल रहा:
- मैं कोड है कि
.save()
MySQL बैकएंड में नहीं देखा जा सकता है कि जब तक पूरे विधि खत्म कॉल की है। यही वह है जो मुझे उम्मीद है कि सेवा विधि लेनदेन है। - मेरे पास अन्य कोड है जो
.save()
पर कॉल करता है जो सेवा विधि समाप्त होने से पहले MySQL में देखा जा सकता है। मुझे यह समझ में नहीं आता है और मुझे इसके बीच असमानता नहीं है और 1. - मेरे पास अभी तक और अधिक कोड है जो डेटाबेस में डालने के लिए
groovy.sql.Sql
का उपयोग करता है। मुझे लगता है कि यह Grails लेनदेन प्रसंस्करण के बाहर है, इसलिए तथ्य यह है कि यह विधि समाप्त होने से पहले करता है समझ में आता है। क्या मैं लेनदेन के अंदर इसे प्रबंधित करने के लिए Grails प्राप्त कर सकता हूँ?
कृपया मेरी धारणाओं में किसी भी त्रुटि के बारे में मुझे अवगत कराएं। विधि
public void updateDb(Date date) {
// Create the results
if (createResults() > 0) {
createA()
createB()
}
}
createA
A a = new a()
a.user = user
a.week = week
a.save()
createB
userWeek = new UserWeek(user: user)
userWeek.number = 1
userWeek.save(flush: true)
मुख्य सेवा: यहाँ कुछ प्रासंगिक कोड हैcreateResults
String insert = "insert into ..."
Sql sql = new Sql(dataSource)
sql.execute(insert)
मैं इसे फ्लश बनाने के लिए flush:true
जोड़ा है, लेकिन अब मैं समझता हूँ कि सिर्फ फ्लश हाइबरनेट करने के लिए नहीं बल्कि वास्तव में इस लेनदेन के लिए प्रतिबद्ध है, क्योंकि यह व्यवहार है। मैं क्या गलत कर रहा हूं? लेन-देन है कि आपकी सेवा विधि के बजाय Sql
constructor that takes a connection argument का उपयोग करके उपयोग कर रहा है में
groovy.sql.Sql
यह स्पष्ट नहीं है कि आपके द्वारा पोस्ट किए गए कोड से क्या हो रहा है, और यह भी मुझे लगता है कि आप सम्मेलन तोड़ रहे हैं। एक लेनदेन संबंधी संदर्भ (Grails विधि कॉल) के भीतर से आप जानबूझकर लेनदेन से बाहर तोड़ने की कोशिश कर रहे हैं? इसके अलावा, आप फ्लश क्यों मजबूर कर रहे हैं? –
@ हंसवेस्टरबेक मैं किसी भी लेन-देन से बाहर निकलने की कोशिश नहीं कर रहा था - मैं बस उस कोड को देख रहा हूं जिसे मैंने विरासत में मिला और इसे समझने की कोशिश की। मैंने एक परीक्षण के रूप में फ्लश को मजबूर कर दिया (क्योंकि उस समय मुझे समझ में नहीं आया) लेकिन मैं इसे हटाने की योजना बना रहा हूं।कुछ भी नहीं (मौजूदा 'createResults' विधि से जो लेनदेन के बाहर काम करता है) को पूरा लेनदेन करने तक प्रतिबद्ध होना चाहिए, है ना? – skaz