Если вы хотите импортировать данные только без какой-либо обработки или преобразования, то такой инструмент, как PostgreSQL COPY
, является самым быстрым способом импорта данных.
Однако, если вам нужно выполнить преобразование, агрегирование данных, корреляцию / объединение существующих и входящих данных, вам потребуется пакетная обработка на уровне приложения.
В этом случае, как я объяснил в этой статье , вы хотите регулярно сбрасывать-очищать-фиксировать:
int entityCount = 50;
int batchSize = 25;
EntityManager entityManager = entityManagerFactory()
.createEntityManager();
EntityTransaction entityTransaction = entityManager
.getTransaction();
try {
entityTransaction.begin();
for (int i = 0; i < entityCount; i++) {
if (i > 0 && i % batchSize == 0) {
entityTransaction.commit();
entityTransaction.begin();
entityManager.clear();
}
Post post = new Post(
String.format("Post %d", i + 1)
);
entityManager.persist(post);
}
entityTransaction.commit();
} catch (RuntimeException e) {
if (entityTransaction.isActive()) {
entityTransaction.rollback();
}
throw e;
} finally {
entityManager.close();
}
Также убедитесь, что вы включили пакетную обработку JDBC, используя следующие свойства конфигурации:
<property
name="hibernate.jdbc.batch_size"
value="25"
/>
<property
name="hibernate.order_inserts"
value="true"
/>
<property
name="hibernate.order_updates"
value="true"
/>
Для получения более подробной информации об этих свойствах конфигурации Hibernate, ознакомьтесь с этой статьей .