Bạn có thể thử bắt đầu giao dịch trước khi lặp lại và sau đó xác nhận nó sau đó trong một giao dịch duy nhất. Vì vậy, về cơ bản bạn đang tạo một lô sẽ được hợp nhất / tồn tại khi cam kết.
Ngoài ra, bạn có thể giới hạn số lượng đối tượng trong một lô được xử lý tại một thời điểm và có thể chuyển các thay đổi vào cơ sở dữ liệu một cách rõ ràng.
Tại đây, bạn đang bắt đầu một giao dịch và chấp nhận nó trong mỗi lần lặp lại và việc tạo / đóng trình quản lý thực thể mỗi lần, sẽ ảnh hưởng đến hiệu suất của nhiều dữ liệu.
Nó sẽ giống như đoạn mã dưới đây.
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();
Tại đây, bạn cũng có thể khôi phục toàn bộ giao dịch nếu bất kỳ đối tượng nào không thể tồn tại / hợp nhất.