JOOQ 和 Liquibase SQL 语句语法错误

问题描述 投票:0回答:1

我想使用 Liquibase 迁移生成代码


public class JooqCodegen {
    public static void main(String[] args) throws Exception {
        Database database = new Database()
            .withName("org.jooq.meta.extensions.liquibase.LiquibaseDatabase")
            .withProperties(
                new Property().withKey("rootPath").withValue("migrations/liquibase/changelog"),
                new Property().withKey("scripts").withValue("master.yaml")
            );
        
        Generate options = new Generate()
            .withGeneratedAnnotation(true)
            .withGeneratedAnnotationDate(false)
            .withNullableAnnotation(true)
            .withNullableAnnotationType("org.jetbrains.annotations.Nullable")
            .withNonnullAnnotation(true)
            .withNonnullAnnotationType("org.jetbrains.annotations.NotNull")
            .withJpaAnnotations(false)
            .withValidationAnnotations(true)
            .withSpringAnnotations(true)
            .withConstructorPropertiesAnnotation(true)
            .withConstructorPropertiesAnnotationOnPojos(true)
            .withConstructorPropertiesAnnotationOnRecords(true)
            .withFluentSetters(false)
            .withDaos(false)
            .withPojos(true);

        Target target = new Target()
            .withPackageName("ru.tinkoff.edu.java.scrapper.domain.jooq")
            .withDirectory("scrapper/src/main/java");

        Configuration configuration = new Configuration()
            .withGenerator(
                new Generator()
                    .withDatabase(database)
                    .withGenerate(options)
                    .withTarget(target)
            );
        GenerationTool.generate(configuration);
    }
}

问题表的方案:

CREATE TABLE links
(
    id   BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    link VARCHAR(200) NOT NULL,
    CONSTRAINT unique_link UNIQUE (link)
);

但是由于某种原因,在Liquibase中有效执行的代码不希望通过JOOQ执行

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Синтаксическая ошибка в выражении SQL "CREATE TABLE links\000a(\000a    id   BIGINT PRIMARY KEY [*]GENERATED ALWAYS AS IDENTITY,\000a    link VARCHAR(200) NOT NULL,\000a    CONSTRAINT unique_link UNIQUE (link)\000a);"; ожидалось "HASH, CONSTRAINT, COMMENT, UNIQUE, NOT NULL, NULL, CHECK, REFERENCES, AUTO_INCREMENT, ,, )"
Syntax error in SQL statement "CREATE TABLE links\000a(\000a    id   BIGINT PRIMARY KEY [*]GENERATED ALWAYS AS IDENTITY,\000a    link VARCHAR(200) NOT NULL,\000a    CONSTRAINT unique_link UNIQUE (link)\000a);"; expected "HASH, CONSTRAINT, COMMENT, UNIQUE, NOT NULL, NULL, CHECK, REFERENCES, AUTO_INCREMENT, ,, )"; SQL statement:
CREATE TABLE links
(
    id   BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    link VARCHAR(200) NOT NULL,
    CONSTRAINT unique_link UNIQUE (link)
); [42001-214]

正如我的意思,H2 不支持这样的 SQL 查询,我找不到有关如何修复它的信息。将我的 SQL 迁移并修复为 JOOQ 支持的 SQL 迁移是正确的决定吗?

java postgresql liquibase jooq
1个回答
0
投票

看起来

GENERATED ALWAYS AS IDENTITY
正在给出问题。

你可以尝试

AUTO_INCREMENT
而不是
GENERATED ALWAYS AS IDENTITY
,如果没有效果你可以看看这个链接我相信它会帮助你解决这类事情。 (查看突出显示单词的文本)

看起来像:

CREATE TABLE links
(
    id   BIGINT AUTO_INCREMENT PRIMARY KEY,
    link VARCHAR(200) NOT NULL,
    CONSTRAINT unique_link UNIQUE (link)
);

希望对您有帮助! 🤘

© www.soinside.com 2019 - 2024. All rights reserved.