INSERT..RETURNING在JOOQ中不起作用

时间:2016-12-21 13:38:02

标签: java mysql mariadb jooq

我有一个MariaDB数据库,我试图在我的表users中插入一行。它有一个生成的id,我希望在插入后得到它。我看过this,但它不适合我:

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

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

1 个答案:

答案 0 :(得分:4)

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

当使用纯SQL时,您当前无法在jOOQ中使用RETURNING子句,因为jOOQ需要知道要绑定到JDBC的标识列名称(在大多数数据库中)。不幸的是,将ID列传递给RETURNING子句是不够的,因为不能保证这是标识列。您也可以将几列传递给RETURNING子句,以防jOOQ知道哪一列是标识列。