आप पुनरावृति से पहले लेन-देन शुरू करने का प्रयास कर सकते हैं और फिर इसे एक ही लेन-देन के भीतर कर सकते हैं। तो, मूल रूप से आप एक बैच बना रहे हैं जो विलय/प्रतिबद्धता पर कायम रहेगा।
साथ ही, आप एक समय में संसाधित किए जाने वाले बैच में ऑब्जेक्ट्स की संख्या को सीमित कर सकते हैं और डेटाबेस में परिवर्तनों को स्पष्ट रूप से फ़्लश कर सकते हैं।
यहां, आप एक लेन-देन शुरू कर रहे हैं और इसे प्रत्येक पुनरावृत्ति में कर रहे हैं और हर बार इकाई प्रबंधक बनाने/बंद करने से कई डेटा के प्रदर्शन पर असर पड़ेगा।
यह नीचे दिए गए कोड जैसा कुछ होगा।
em = factory.createEntityManager();
em.getTransaction().begin();
int i = 0;
for (Object ob : list) {
Long start = Calendar.getInstance().getTimeInMillis();
em.merge(ob);
Long end = Calendar.getInstance().getTimeInMillis();
Long diff = end - start;
LOGGER.info("Time: " + diff);
/*BATCH_SIZE is the number of entities
that will be persisted/merged at once */
if(i%BATCH_SIZE == 0){
em.flush();
em.clear();
}
i++;
}
em.getTransaction().commit();
em.close();
यहां, यदि कोई वस्तु बनी रहने/विलय करने में विफल रहती है, तो आप पूरे लेन-देन को रोलबैक भी कर सकते हैं।