我想使用 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 迁移是正确的决定吗?
看起来
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)
);
希望对您有帮助! 🤘