Anda dapat mencoba memulai transaksi sebelum iterasi &kemudian melakukan setelahnya dalam satu transaksi. Jadi, pada dasarnya Anda membuat kumpulan yang akan digabungkan/bertahan pada komit.
Selain itu, Anda dapat membatasi jumlah objek dalam kumpulan yang akan diproses pada satu waktu &dapat secara eksplisit memasukkan perubahan ke dalam basis data.
Di sini, Anda memulai transaksi &mengkomitnya di setiap iterasi dan juga membuat/menutup pengelola entitas setiap kali, akan memengaruhi kinerja banyak data.
Ini akan menjadi seperti kode di bawah ini.
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();
Di sini, Anda juga dapat mengembalikan seluruh transaksi jika salah satu objek gagal bertahan/gabung.