INSERT..RETURNING 在 JOOQ 中不起作用

Héc*_*tor 5 java mysql mariadb jooq

我有一个 MariaDB 数据库,我正在尝试在我的表中插入一行users。它有一个生成的id,我想在插入后得到它。我见过这个,但它对我不起作用:

public Integer addNewUser(String name) {
    Record record = context.insertInto(table("users"), field("name"))
        .values(name)
        .returning(field("id"))
        .fetchOne();
    return record.into(Integer.class);
}
Run Code Online (Sandbox Code Playgroud)

新行已插入,但record始终为null。我没有使用 JOOQ 代码生成。

Luk*_*der 4

这是 jOOQ 3.9 中的一个已知限制: https ://github.com/jOOQ/jOOQ/issues/2943

目前,RETURNING当使用普通 SQL 表和字段(与生成的表和字段相对)时,您无法在 jOOQ 中使用该子句,因为 jOOQ 需要知道要绑定到 JDBC 的标识列名称(在大多数数据库中),并且元数据无法从你的table("users")对象。

不幸的是,将列传递给ID子句RETURNING是不够的,因为不能保证这是标识列。您还可以将多个列传递给该RETURNING子句,以防 jOOQ 不知道哪一列是标识列。