JOOQ H2(DDLDatabase)代码生成失败:KEY为保留字问题
问题:H2新版本中
KEY作为保留字导致JOOQ代码生成失败 在H2数据库新版本中,KEY被设为保留字。按照JOOQ的DDL代码生成流程操作时,由于部分表存在名为KEY的列,代码生成失败,报错信息如下:
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "create table if not exists FACT_ORDER ([*]KEY varchar not null, ...)"; expected "identifier"; SQL statement: create table if not exists FACT_ORDER (KEY varchar not null, ...) [42001-214]
当前存在以下限制:
- 无法重命名
KEY列 - 对应的SQL DDL文件被Liquibase占用,无法直接编辑
已尝试但无效的方案
H2提供了SET NON_KEYWORDS KEY命令,可将KEY设为非保留字。将该命令添加到JOOQ生成器配置后,问题依然存在,配置代码如下:
val target = new Target(); target.setPackageName("com.mycompany.codegen.orderdb"); target.setDirectory(targetPath); val generator = new Generator() .withDatabase( new Database() .withName("org.jooq.meta.extensions.ddl.DDLDatabase") .withProperties( new Property().withKey("sql").withValue("SET NON_KEYWORDS KEY;"), new Property().withKey("scripts").withValue(tempDir + "/*.sql"), new Property().withKey("sort").withValue("alphanumeric"))) .withTarget(target); val generate = new Generate(); generate.setPojos(true); generate.setRecords(true); generate.setPojosEqualsAndHashCode(true); generate.setFluentSetters(true); generator.setGenerate(generate); GenerationTool.generate( new Configuration().withGenerator(generator).withLogging(getLogLevel()));
内容的提问来源于stack exchange,提问作者daltonfury42
相关产品推荐
相关产品推荐

