Question

J'ai un PostgreSQL uris table avec série (auto-incrémentation) uri_id colonne et chaîne uri colonne.Je peux bien interroger la table en utilisant jOOQ :

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

Cela renvoie un Java Integer.Mais lorsque j'insère un nouvel URI, je souhaite récupérer le fichier généré uri_id clé, alors j'essaye ceci:

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

Cette fois, j'obtiens une erreur :

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

À titre de test, j'ai essayé de fournir une valeur littérale pour uri_id dans le INSERT déclaration, mais j'ai toujours l'erreur.

Il semble que le code SQL correct soit généré :

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

Mais l'enregistrement renvoyé est vide.Ceci est vrai même lorsque je précise un littéral uri_id dans l'instruction d'insertion.

Comment puis-je récupérer une colonne générée automatiquement à partir d'un PostgreSQL INSERT déclaration utilisant jOOQ ?

Était-ce utile?

La solution

Cette question est également discutée plus en détail sur le Groupe d'utilisateurs jOOQ.

Essentiellement, vous rencontrez un problème connu où le RETURNING La clause n'est actuellement pas prise en charge par jOOQ 3.3 (et versions antérieures) lorsqu'elle est utilisée avec du SQL brut, au lieu d'avec des tables générées.Voici la référence du problème :

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top