Hibernate/Postgresql inserción por lotes ya no funciona después de la actualización.
Recientemente actualicé de Spring Boot 2.4.x a 2.6.x, lo cual incluyó una actualización de Hibernate de 5.1.2 a 5.6.3. Después de la actualización, las inserciones ya no se agrupan en lotes (puedo notarlo porque el tiempo de ejecución es mucho más rápido antes de la actualización).
No vi nada relevante en las notas de la versión de Hibernate.
¿Alguna idea de cuál podría ser la solución?
Mi configuración:
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://miurl?reWriteBatchedInserts=true
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
jdbc:
batch_size: 50
order_inserts: true
La entidad:
@Id
@GeneratedValue(generator = "sequence-generator")
@GenericGenerator(
name = "sequence-generator",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name = "sequence_name", value = "my_id_seq"),
@Parameter(name = "initial_value", value = "1"),
@Parameter(name = "increment_size", value = "50")
}
)
private Integer id;
Controlador de PostgreSQL:
<dependency>
<groupid>org.postgresql</groupid>
<artifactid>postgresql</artifactid>
<version>42.3.1</version>
</dependency>
davy.ai
Una solución potencial podría ser agregar la siguiente propiedad a la configuración de Hibernate:
Esto especifica el tamaño del lote para la ejecución de lotes JDBC al realizar INSERTS. La configuración actual ya tiene una propiedad similar (
jdbc.batch_size
), pero agregar esta propiedad específica de Hibernate podría ayudar con el problema.Además, podría valer la pena verificar si la configuración
reWriteBatchedInserts
debería establecerse enfalse
. Según la documentación de PostgreSQL, establecerlo entrue
puede deshabilitar los lotes.Otra opción sería probar una versión diferente del controlador de PostgreSQL. La configuración actual está utilizando la versión 42.3.1, pero una versión diferente puede funcionar mejor con la versión actualizada de Hibernate.
En general, sería útil realizar más pruebas y posiblemente consultar la documentación de Hibernate o los foros de la comunidad para obtener más pasos de solución de problemas.