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!
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: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áusulareturning()
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étodogetValues()
. 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!