Hibernate не может выполнять пакетную вставку сущностей, если сущность использует IDENTITY
для генерации своего идентификатора (также упоминается в документации по адресу здесь ).
Поэтому вам нужно изменить использование SEQUENCE
для генерации идентификатора. И согласно this , выберите использование алгоритма «объединенный» или «объединенный-лоу» для получения нового идентификатора из последовательности, чтобы еще больше повысить производительность за счет сокращения количества циклов обработки для получения идентификатора.
Таким образом, сопоставление идентификаторов выглядит так:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="foo_sequence")
@SequenceGenerator(name="emp_sequence", sequenceName = "emp_id_seq", allocationSize = 100)
private Long id;
И настройки гибернации:
spring.jpa.properties.hibernate.order_inserts = true
spring.jpa.properties.hibernate.order_updates = true
spring.jpa.properties.hibernate.jdbc.batch_size = 1000
spring.jpa.properties.hibernate.jdbc.batch_versioned_data = true
# For using "pool-lo" optimiser for generating ID when using JPA @SequenceGenerator
spring.jpa.properties.hibernate.hibernate.id.optimizer.pooled.preferred = pooled-lo
Кроме того, вы должны убедиться, что соответствующая последовательность идентификаторов в Postre SQL совпадает с конфигурацией в @SequenceGenerator
:
alter sequence emp_id_seq increment by 100;
Еще один совет - добавить reWriteBatchedInserts=true
в строку подключения JDB C, что обеспечит увеличение производительности в 2-3 раза, как указано в документы .