تا جایی که من می دانم jpa امکان مستقیمی برای Bulk Insert ندارد. ولی شما می توانید flush کردن رکوردهای insert شده را به تاخیر بیندازید مثلا هر ۱۰۰۰ رکورد یک بار flush کنید. به این ترتیب سرعت خیلی بالاتر می رود. به کد زیر توجه بفرمایید:
public void bulkSave(Collection<MyEntity> entities) {
final List<MyEntity> savedEntities = new ArrayList<MyEntity>(entities.size());
int i = 0;
for (MyEntity t : entities) {
entityManager.persist(t);
i++;
if (i % 1000 == 0) {
// Flush a batch of inserts and release memory.
entityManager.flush();
entityManager.clear();
}
}
}
اگر به دنبال یک راه حل حرفه ای تر هستید می توانید از apache camel استفاده کنید. در اینجا می توانید روش کار را مشاهده کنید. در این مثال ورودی camel از یک query آمده ولی شما می توانید ورودی را به queue مورد نظر خودتان متصل کنید.