You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Quarkus中使用Liquibase Hibernate扩展生成变更日志?

在Quarkus中从JPA实体生成Liquibase变更日志

你可以在Quarkus中通过Liquibase Hibernate扩展实现从JPA实体生成变更日志的功能,核心是修正Maven插件的参考URL配置,以下是具体步骤:

一、修正Liquibase Maven插件配置

你的现有配置中,referenceUrl使用了Spring格式,这不适用于Quarkus,需要替换为Hibernate EJB3格式,并完善类路径配置:

<plugin>
  <groupId>org.liquibase</groupId>
  <artifactId>liquibase-maven-plugin</artifactId>
  <version>4.28.0</version>
  <configuration>
    <driver>oracle.jdbc.driver.OracleDriver</driver>
    <url>jdbc:oracle:thin:@//localhost:1521/ORCLCDB</url>
    <changeLogFile>src/main/resources/db/db.changelog-master.yaml</changeLogFile>
    <username>foo</username>
    <password>bar</password>
    <!-- 替换为Quarkus兼容的Hibernate参考URL -->
    <referenceUrl>hibernate:ejb3:com.example.myapplication?dialect=org.hibernate.dialect.OracleDialect</referenceUrl>
    <!-- 添加类路径,确保Liquibase能找到JPA实体和依赖 -->
    <classpath>
      <path>${project.build.outputDirectory}</path>
      <path>${project.build.directory}/dependency</path>
    </classpath>
  </configuration>
  <!-- 可选:添加插件依赖,确保Hibernate相关类可用 -->
  <dependencies>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-hibernate-orm-panache</artifactId>
      <version>${quarkus.platform.version}</version>
    </dependency>
    <dependency>
      <groupId>org.liquibase.ext</groupId>
      <artifactId>liquibase-hibernate6</artifactId>
      <version>4.28.0</version>
    </dependency>
  </dependencies>
</plugin>

配置说明:

  • referenceUrl:使用hibernate:ejb3前缀,后面跟你的JPA实体所在的根包(比如com.example.myapplication),并指定与实际数据库匹配的方言(这里是Oracle的方言)。
  • classpath:指定编译后的实体类目录和项目依赖目录,确保Liquibase能加载到JPA实体和Hibernate的配置。

二、生成变更日志

  1. 先编译项目,确保JPA实体已生成:
mvn compile
  1. 执行Liquibase的diff命令,对比JPA实体与目标数据库的差异并生成变更日志:
mvn liquibase:diff

执行完成后,差异内容会写入你指定的db.changelog-master.yaml文件中。

三、替代方案

如果上述方式不符合你的需求,还可以尝试以下方案:

1. Quarkus Dev UI快速生成

启动Quarkus开发模式:

mvn quarkus:dev

访问Dev UI(默认地址:http://localhost:8080/q/dev),找到Liquibase模块,使用内置的diff功能生成变更日志,无需手动配置Maven插件参数。

2. 从Hibernate生成的DDL转换

先让Hibernate导出实体对应的DDL:

mvn quarkus:dev -Dquarkus.hibernate-orm.export-ddl=true

DDL文件会生成在target/quarkus-app/quarkus/hibernate-orm/目录下,然后使用Liquibase的generateChangeLog命令将DDL转换为变更日志:

mvn liquibase:generateChangeLog -Dliquibase.url=jdbc:oracle:thin:@//localhost:1521/ORCLCDB -Dliquibase.username=foo -Dliquibase.password=bar -Dliquibase.changeLogFile=src/main/resources/db/generated-changelog.yaml

内容的提问来源于stack exchange,提问作者Régis Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 02:15:00