代码之家  ›  专栏  ›  技术社区  ›  lumo

如何使用标识列ddl表

  •  0
  • lumo  · 技术社区  · 7 年前

    我正在尝试使用创建数据库表 JOOQ 其中包含 id 应为 identity

    例如,我的 SQL 生成人: JOOQ公司

    create table "help"(
      "id" integer not null,
      "guid" varchar(36) not null,
      "category" nvarchar(255) null,
      "value" nvarchar(2048) null,
      constraint "PK_HELP_ID"
        primary key ("id"),
      constraint "UK_HELP_GUID"
        unique ("guid")
    )
    

    这个 JOOQ公司 等效值为:

    Name nameId = DSL.name("id");
    Name nameGuid = DSL.name("guid");
    Name nameCategory = DSL.name("category");
    Name nameValue = DSL.name("value");
    CreateTableConstraintStep table = create.createTable("help")//
            .column(nameId, SQLDataType.INTEGER.identity(true))//
            .column(nameGuid, SQLDataType.VARCHAR(36).nullable(false))//
            .column(nameCategory, SQLDataType.NVARCHAR(255))//
            .column(nameValue, SQLDataType.NVARCHAR(2048))//
            .constraints(//
                    DSL.constraint("PK_HELP_ID").primaryKey(nameId),
                    DSL.constraint("UK_HELP_GUID").unique(nameGuid));
    

    我想 SQLDataType.INTEGER.identity(true) 这正是我要搜索的,但结果显示了一些不同的东西。

    我的调查仅得出以下结果:

    1. JOOQ公司 博客 identity columns - Subtle SQL differences: IDENTITY columns

    2. 还有一个关于github的问题 Add support for IDENTITY columns in CREATE TABLE statements #5062

    如何将列声明为 身份 对于 DDL 使用 JOOQ公司 ? JOOQ版本3.10.5

    1 回复  |  直到 4 年前
        1
  •  0
  •   lumo    7 年前

    我的错误是 SQLDialect.SQL99 SQLDialect.DEFAULT

    注: SQL方言。SQL99 已弃用。

    显然,正如您在参考中指出的那样,身份是特定于数据库的 1 从我的问题来看,这将导致我得到什么。(因为没有可用于 DEFAULT SQL。

    DSLContext ctx = DSL.using(con, SQLDialect.DEFAULT);
    

    如果我配置 DSLContext 具有 SQLDialect.H2 或者例如 SQLDialect.MYSQL JOOQ 生成正确的输出。

    DSLContext ctx = DSL.using(con, SQLDialect.H2);
    

    幸亏 Lukas Eder 因为我指出了我的错误。