का उपयोग कर हाइबरनेट बैच अपडेट मैं अपने ओआरएम परत के लिए हाइबरनेट का उपयोग कर रहा हूं। मैं एक लेनदेन में एचक्यूएल प्रश्नों के बैच को चलाने की कोशिश कर रहा हूं (मैं session.update का उपयोग नहीं कर सकता)। मुद्दा यह है कि लेनदेन.com() भी लूप के अंत में है, अद्यतन क्वेरी एक-एक करके चलती हैं। क्या एक लेनदेन में एकाधिक एचक्यूएल प्रश्न चलाने का कोई तरीका है?एचक्यूएल क्वेरी
public void updateItems() {
t = session.beginTransaction();
for (int i = 0; i < itemList.size(); i++) {
Query q = createUpdateQuery(session, itemList.get(i));
q.executeUpdate(); //updating one by one, and not waiting for transaction commit
}
t.commit();
}
Query createUpdateQuery(Session session, Item item) {
Query q = session.createQuery(
"Update Item i set i.notes=:notes, i.time=:time, i.counter=:counter, i.status=:status Where i.id=:id and i.time=:time");
q.setParameter("time", item.getTime());
q.setParameter("status", item.getStatus());
q.setParameter("notes", item.getNotes());
q.setParameter("id", item.getId());
return q;
}
किसी भी मदद की सराहना करें।
मुझे आपके कोड के साथ स्पष्ट रूप से कुछ भी गलत नहीं दिख रहा है। अपडेट डेटाबेस पर एक-एक करके होंगे, लेकिन जब तक आप कॉल को कॉल नहीं करेंगे तब तक प्रतिबद्ध नहीं होंगे। कॉल करने से पहले आपको लेनदेन को किसी भी समय रोलबैक करने में सक्षम होना चाहिए। यह बहुत मानक है। क्या आप डेटाबेस के लिए राउंड ट्रिप के बारे में चिंतित हैं? – markwatsonatx
एक लेनदेन होने का मतलब बड़े बड़े बैच में कई अपडेट भेजना नहीं है। और वहां बहुत सी चीजें हैं जो आपके दृष्टिकोण में सही नहीं दिख रही हैं (मेरी इच्छा है कि आप उत्पादन कोड में क्या करने जा रहे हैं)। –
आपके उत्तर के लिए धन्यवाद। मुझे session.update (आइटम) से इस दृष्टिकोण में बदलने की जरूरत है, और प्रदर्शन में कमी आई है। – Lasti