【发布时间】:2021-05-25 00:19:17
【问题描述】:
我最初使用 hibernate 创建项目以像大多数人一样创建表,但随后我开始使用 flyway 进行数据库迁移。
问题是我删除了包括 db 在内的整个本地系统并尝试再次旋转它,但我遇到了休眠和飞行路径的冲突。
顺便说一下,我正在使用 java api。所以当我去本地重建数据库时我打开了
spring.jpa.hibernate.ddl-auto=${HIBERNATE_DDL:create} 只是第一次运行,然后转过来验证
所以它构建了所有表,但是现在当我尝试启动应用程序时,它会尝试运行第一个迁移
ALTER TABLE public.auth ADD COLUMN resent boolean
这将导致启动时出错,因为该新列是由休眠添加的
Error Code : 0
Message : ERROR: column "resent" of relation "auth" already exists
Location : db/migration/V1__Add_Resent_To_Auth.sql (/Users/brian/code/slap/build/resources/main/db/migration/V1__Add_Resent_To_Auth.sql)
Line : 1
Statement : ALTER TABLE public.auth
ADD COLUMN resent boolean
那么我如何告诉 flyway 当前版本是 V9 并且仅在此之后运行迁移。它不应该只是查看 flyway_schema_history 并查看版本 9 是最后一个条目,然后再运行迁移吗?我一定是错过了什么
我尝试在我的配置中这样做以首先设置基线版本
@Configuration
class FlyWay() {
@Value("\${spring.datasource.url}")
lateinit var url: String
@Value("\${spring.datasource.username}")
lateinit var username: String
@Value("\${spring.datasource.password}")
lateinit var password: String
@Bean
fun migrate() {
val flyway = Flyway.configure().baselineVersion("9.0").dataSource(url, username, password).load()
flyway.migrate()
}
}
没有这样的运气,它仍然尝试运行 V1
我也尝试将它添加到 application.properties
spring.flyway.baselineVersion=9.0
同样的错误
【问题讨论】:
标签: spring spring-boot hibernate flyway