java - INSERT..RETURNING 在 JOOQ 中不起作用

标签 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 代码生成。

最佳答案

这是 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/

相关文章:

mysql - 每 5 次插入更改一些值(MySQL 存储过程)

MySQL Cluster + Manager 和 NDB/J

MySQL/MariaDB FOUND_ROWS 返回 1,即使没有返回任何行

ubuntu - MariaDB:正在安装 MariaDB:未满足的依赖项,mariadb-server-10.0

java - 使用 @Qualifier 时,依赖注入(inject)在 Spring 测试中失败

java - Spring Data JPA 持久化实体,具有嵌套的复合主键实体,其本身是一个在持久化时分离的嵌套实体

php - 循环中的复选框 - PHP

java - vlcj 在尝试创建服务器流时出错

Java 输入流/XSL 线程安全

mysql - 如何告诉 SQL 使用另一个表作为输入值来运行命令?