我正在尝试使用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)
正是我正在搜索的内容,但结果却显示了不同的内容。
我的调查只带来了这些结果:
关于JOOQ
博客identity columns - Subtle SQL differences: IDENTITY columns
github上有一个问题Add support for IDENTITY columns in CREATE TABLE statements #5062
如何使用identity
将DDL
列声明为JOOQ
?
JOOQ版本3.10.5
答案 0 :(得分:0)
我的错误是使用SQLDialect.SQL99
和SQLDialect.DEFAULT
。
注意:不推荐使用SQLDialect.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指出我的错误。