【发布时间】:2023-04-08 05:00:01
【问题描述】:
我正在尝试使用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) 完全符合我的要求,但结果显示出一些不同的东西。
我的调查只带来了这些结果:
-
JOOQblog identity columns - Subtle SQL differences: IDENTITY columns 上关于此的博文 -
还有一个问题在 github Add support for IDENTITY columns in CREATE TABLE statements #5062
如何使用JOOQ 将DDL 的列声明为identity?
JOOQ 版本 3.10.5
【问题讨论】:
-
你用什么
SQLDialect来生成SQL? -
我尝试使用 SQL99,它已被弃用并使用 DEFAULT。但显然,因为这些东西是特定于数据库的,如 [1] 中所写......这将导致我得到什么。 感谢指点我这个。使用 H2 或 MySql 可以得到我预期的结果!