在不使用hibernate.hbm2ddl.auto的情况下,如何将所有初始架构导出到Flyway中?
我几乎处于JEE开发的准备阶段。有很多建议不要在生产中使用Hibernate的hbm2ddl.auto,我决定删除它。
所以现在,我发现了Flyway,它似乎对未来的数据库更改和迁移非常有用,但我在第一步就卡住了:我有很多实体,有些实体继承自基本实体。这使得 CREATE 语句非常复杂。
创建第一个迁移文件的最佳做法是什么?
谢谢!
我几乎处于JEE开发的准备阶段。有很多建议不要在生产中使用Hibernate的hbm2ddl.auto,我决定删除它。
所以现在,我发现了Flyway,它似乎对未来的数据库更改和迁移非常有用,但我在第一步就卡住了:我有很多实体,有些实体继承自基本实体。这使得 CREATE 语句非常复杂。
创建第一个迁移文件的最佳做法是什么?
谢谢!
如果您在开发过程中采用了“实体优先”方法,则需要以与第一个实时部署相同的方式生成初始架构:这将生成 Flyway 使用的第一个创建脚本,并且可能还需要第二个关联的脚本来填充引用数据。
简而言之,在第一次部署后不再能够使用的原因是,这将破坏现有数据,并且不够可靠,无法涵盖所有类型的架构更改(听起来您可能已经从这个SO问题中知道)。hbm2ddl.auto
create
update
Flyway是一个非常有用的工具,但它确实需要一定程度的纪律,这在开发过程中可能不存在。从初始版本开始,需要为 Flyway 生成数据库更新脚本,这些脚本等效于自上次版本以来对实体所做的更改。有一些工具(例如来自Redgate的各种商业产品)可能会有所帮助:这些工具试图“比较”两个模式并生成模式和/或数据更新脚本,以便从数据库A获取到数据库B。但根据我的经验,它们都不是完美的,它们还没有完全达到实现完全自动化方法的圣杯。
可以说,最好的方法是“随用随心所欲”的手动方法,以确保每当进行影响架构或引用数据的实体更改时,将非破坏性更新脚本提交到源代码管理中 - 但如前所述,这将需要一些纪律和/或记录所有团队成员遵循的过程。
对于第一个迁移文件,您只需要数据库的当前 ddl。有许多工具可以为您获得此功能(例如IntelliJ IDEA数据库工具中的“复制ddl”选项或数据库供应商提供的GUI客户端)。