Возвращение идентификатора в общей вставке с использованием JOOQ - PullRequest
1 голос
/ 29 апреля 2019

У меня очень универсальный API для вставки материала с использованием JOOQ в таблицы:

 void insert(@NonNull final Table<?> table,
                @NonNull final Collection<Field<?>> columns,
                @NonNull final Collection<Object> values) {
        dslContext.insertInto(table)
                .columns(columns)
                .values(values)
                .execute();
    }

Есть ли способ вернуть id этой вставленной записи?Все первичные ключи таблиц в моей базе данных называются «id», так что я могу его кодировать, но не могу найти способ вернуть его и привести к Integer / Long.Я использую JOOQ 3.9.5.

РЕДАКТИРОВАТЬ: я использую MSSQL внизу.

1 Ответ

1 голос
/ 29 апреля 2019

Запись:

long insert(@NonNull final Table<?> table,
            @NonNull final Collection<Field<?>> columns,
            @NonNull final Collection<Object> values) {
    return dslContext
          .insertInto(table)
          .columns(columns)
          .values(values)
          .returning(table.field("ID")) // Replace with your field name case
          .fetchOne()
          .into(long.class);
}

Предполагается, что вы используете сгенерированный код, чьи сгенерированные Table экземпляры реализуют Table.getIdentity(). В качестве альтернативы, если вы не можете предоставить личность, вы можете написать:

long insert(@NonNull final Table<?> table,
            @NonNull final Collection<Field<?>> columns,
            @NonNull final Collection<Object> values) {
    dslContext
          .insertInto(table)
          .columns(columns)
          .values(values)
          .execute();
    return dslContext.lastID().longValue();
}
...