我有一个非常通用的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”,因此我可以对其进行ahrdcode编码,但是找不到返回它并转换为Integer / Long的方法。 我正在使用JOOQ 3.9.5。
编辑:我在下面使用MSSQL。
答案 0 :(得分: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();
}