使用JOOQ返回通用插入中的id

问题描述 投票:1回答:1

我有一个非常通用的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。

java sql sql-server jooq
1个回答
1
投票

写:

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.