我有一个 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 代码生成。
最佳答案
这是 jOOQ 3.9 中的已知限制:https://github.com/jOOQ/jOOQ/issues/2943
当使用 plain SQL tables and fields 时,您当前不能在 jOOQ 中使用 RETURNING
子句(与生成的相反),因为 jOOQ 需要知道绑定(bind)到 JDBC 的标识列名称(在大多数数据库中),并且该元数据无法从 table("users")
对象中获得.
不幸的是,将 ID
列传递给 RETURNING
子句是不够的,因为不能保证这是标识列。您还可以将多个列传递给 RETURNING
子句,在这种情况下 jOOQ 不知道哪一个是标识列。
关于java - INSERT..RETURNING 在 JOOQ 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41264116/