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

Quarkus Dev Services强制Hibernate建表覆盖Flyway配置问题咨询

背景

在test与dev配置环境下使用Quarkus Dev Services启动Postgres数据库,数据库Schema统一由Flyway管理。

问题描述

启用Dev Services时,Quarkus会自动设置quarkus.hibernate-orm.mddestinationdb.database.generation=drop-and-create,根据项目内定义的实体生成数据库结构。但Flyway脚本定义的库表结构与实体存在差异,例如脚本会新增实体中未定义的列,这类列会被Hibernate自动删除,不符合预期。目标是即使在Dev Services模式下,Hibernate也不自动修改数据库结构。

启动时控制台会打印如下日志:

[io.quarkus.hibernate.orm.deployment.HibernateOrmProcessor] (build-8) Setting quarkus.hibernate-orm.database.generation=drop-and-create to initialize Dev Services managed database
已尝试方案

曾尝试显式将该属性设置为none,相关配置如下:

# 该组配置预期让Hibernate不修改现有数据库结构
%dev.quarkus.flyway.schemas=my_schema
%dev.quarkus.datasource.devservices.port=5434
%dev.quarkus.flyway.baseline-on-migrate=true
%dev.quarkus.flyway..migrate-at-start=true


# 显式设置该参数后仍无法关闭Dev Services的自动配置
%dev.quarkus.hibernate-orm.mddestinationdb.database.generation=none

注:上述配置中%dev.quarkus.flyway..migrate-at-start=true多写了一个.属于笔误,修正后依然无法解决自动删表/删列的问题

解决方案

只需要加一行配置,关闭Hibernate ORM在Dev Services场景下的自动建表触发逻辑即可,不需要修改业务代码,也不会影响Dev Services自动启动Postgres容器的能力:

# 禁止Dev Services启动时自动覆盖Hibernate建表策略
quarkus.hibernate-orm.devservices.enabled=false

之后再针对dev、test环境补全正确的Flyway和Hibernate配置即可:

# dev环境配置
%dev.quarkus.flyway.migrate-at-start=true
%dev.quarkus.hibernate-orm.mddestinationdb.database.generation=none

# test环境配置
%test.quarkus.flyway.migrate-at-start=true
%test.quarkus.hibernate-orm.mddestinationdb.database.generation=none

配置完成后重启应用,控制台不会再出现HibernateOrmProcessor自动设置drop-and-create的日志,数据库结构完全由Flyway脚本管理,不会出现Hibernate删除Flyway新增自定义列的问题。
如果是多数据源场景,注意给每个持久化单元单独配置对应的database.generation=none,同时匹配对应数据源的Flyway启动迁移配置即可。


内容的提问来源于stack exchange,提问作者gucce

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:51:10