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.

Insertando múltiples filas en JOOQ + devolviendo los ids

Estoy trabajando en una aplicación Spring Boot donde estoy utilizando JOOQ versión 3.15.5 para comunicarme con la base de datos. Ahora estoy intentando insertar múltiples filas en la base de datos y obtener los IDs como conjunto de resultados. ¿Cómo puedo hacer esto? Intenté usar valuesOfRecords para insertar una colección de registros pero no pude hacerlo funcionar, porque me obliga a poner todos los campos de MI_TABLA, incluido el ID desconocido. Intenté:

context
   .insertInto(MY_TABLE, MY_TABLE.ID, MY_TABLE.STATUS, MY_TABLE.NAME)
   .valuesOfRecords(records)
   .returningResult(MY_TABLE.ID)
   .fetchInto(Long.class);

¡Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para insertar múltiples filas en la base de datos usando JOOQ y recuperar los IDs en el conjunto de resultados, puedes usar el método .batchInsert() proporcionado por JOOQ. Aquí tienes un ejemplo de código:

    DSLContext context = DSL.using(connection, dialect);
    
    List<mytablerecord> records = createRecords(); // Crear una lista de registros para ser insertados
    
    // Usa batchInsert para insertar múltiples registros en una sola consulta
    Result<mytablerecord> result = context.batchInsert(records)
                    .returning(MY_TABLE.ID)
                    .fetch();
    
    // Extrae los IDs del conjunto de resultados
    List<long> ids = result.getValues(MY_TABLE.ID, Long.class);
    
    

    En el código anterior, primero creamos un objeto DSLContext utilizando la conexión a la base de datos y el dialecto de la base de datos. Luego creamos una lista de registros que queremos insertar en la base de datos.

    A continuación, utilizamos el método batchInsert() para insertar todos los registros en una sola consulta. La cláusula returning() se usa para especificar las columnas que queremos recuperar de la base de datos después de que se complete la operación de inserción. En este caso, queremos recuperar la columna ID.

    Por último, recuperamos los IDs del objeto Result utilizando el método getValues(). El primer parámetro de este método es el campo que queremos recuperar (MY_TABLE.ID), y el segundo parámetro es el tipo de ese campo (Long.class). Esto devolverá una lista de todos los IDs que se generaron durante la operación de inserción.

    ¡Espero que esto sea de ayuda!

Comments are closed.