diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java index 1b7bc443c8..f90fff9846 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java @@ -1198,17 +1198,22 @@ abstract class AbstractDMLQuery extends AbstractRowCountQuery ) { if (values != null && values.length > 0) { - // This shouldn't be null, as relevant dialects should - // return empty generated keys ResultSet - if (table.getIdentity() != null) { - final Field field = (Field) table.getIdentity().getField(); + // [#3035] Support identity columns and single column primary keys + final Field identity = + table.getIdentity() != null + ? (Field) table.getIdentity().getField() + : table.getPrimaryKey() != null && table.getPrimaryKey().getFields().size() == 1 + ? table.getPrimaryKey().getFields().get(0) + : null; + + if (identity != null) { Object[] ids = new Object[values.length]; for (int i = 0; i < values.length; i++) - ids[i] = field.getDataType().convert(values[i]); + ids[i] = identity.getDataType().convert(values[i]); // Only the IDENTITY value was requested. No need for an // additional query - if (returningResolvedAsterisks.size() == 1 && new Fields<>(returningResolvedAsterisks).field(field) != null) { + if (returningResolvedAsterisks.size() == 1 && new Fields<>(returningResolvedAsterisks).field(identity) != null) { for (final Object id : ids) { ((Result) getResult()).add( Tools.newRecord( @@ -1237,7 +1242,7 @@ abstract class AbstractDMLQuery extends AbstractRowCountQuery .from(table) // [#5050] [#9946] Table.getIdentity() doesn't produce aliased fields yet - .where(table.field(field).in(ids)) + .where(table.field((Field) identity).in(ids)) .fetch(); returnedResult.attach(originalConfiguration);