es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una solución potencial podría ser agregar la siguiente propiedad a la configuración de Hibernate:

    hibernate.jdbc.batch_size: 50
    

    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 en false. Según la documentación de PostgreSQL, establecerlo en true 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.

Comments are closed.