Pregunta

tengo un postgresql uris tabla con serial (autoincremental) uri_id columna y cadena uri columna.Puedo consultar la tabla bien usando jOOQ:

createDSLContext().select(fieldByName("uri_id")).from(tableByName("uris"))
    .where(fieldByName("uri").equal(uri.toString())).fetchOne(0, Integer.class))

Eso devuelve un Java Integer.Pero cuando inserto un nuevo URI, quiero recuperar el generado uri_id clave, así que intento esto:

createDSLContext().insertInto(tableByName("uris"), fieldByName("uri"))
    .values(uri.toString()).returning(fieldByName("uri_id")).fetchOne().getValue(0, Integer.class)

Esta vez me sale un error:

Exception in thread "main" java.lang.IllegalArgumentException: Field 0 is not contained in list

Sólo como prueba, intenté proporcionar un valor literal para uri_id en el INSERT declaración, pero aún así aparece el error.

Parece que se está generando el SQL correcto:

insert into "uris" ("uri") values ('http://example.com/') returning "uri_id"

Pero el registro devuelto está vacío.Esto es cierto incluso cuando especifico un literal. uri_id en la declaración de inserción.

¿Cómo puedo recuperar una columna generada automáticamente desde PostgreSQL? INSERT declaración usando jOOQ?

¿Fue útil?

Solución

Esta cuestión también se está debatiendo más detalladamente en el grupo de usuarios jOOQ.

Básicamente, te encuentras con un problema conocido en el que el RETURNING Actualmente, la cláusula no es compatible con jOOQ 3.3 (y versiones anteriores) cuando se usa con SQL simple, en lugar de con tablas generadas.Esta es la referencia del problema:

https://github.com/jOOQ/jOOQ/issues/2374

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top