不使用hibernate.hbm2ddl.auto,如何将所有初始架构导出到Flyway?

时间:2016-06-24 08:04:58

标签: java hibernate java-ee flyway

我正处于JEE开发的近期阶段。有很多建议不要在生产中使用Hibernate的hbm2ddl.auto,我决定删除它。

所以现在,我发现了Flyway,这对于未来的数据库更改和迁移似乎很有用,但我在第一步陷入困境:我有很多实体,一些实体继承自基础实体。这使得CREATE语句非常复杂。

创建第一个迁移文件的最佳做法是什么?

谢谢!

4 个答案:

答案 0 :(得分:7)

如果你先采取了"实体"在开发过程中,您需要以相同的方式为第一次实时部署生成初始模式:这将生成Flyway使用的第一个创建脚本,并且可能还需要第二个关联脚本来填充参考数据。

简而言之,第一次部署后无法再使用set-cookie的原因是hbm2ddl.auto会破坏现有数据,create不够可靠,无法使用update涵盖所有类型的架构更改(听起来您可能已经从this SO question知道)。

Flyway是一个非常有用的工具,但它确实需要在开发过程中可能不存在的一定程度的纪律。从最初版本开始,需要为Flyway生成数据库更新脚本,这些脚本等同于自上次发布以来对实体所做的更改。有些工具(例如来自Redgate的各种商业产品)可能会对此有所帮助:这些尝试可以帮助实现这些目标。两个模式并生成模式和/或数据更新脚本,用于从数据库A到数据库B.但根据我的经验,它们都不是完美的,并且它们不能完全达到实现完全自动化方法的圣杯。 / p>

可以说,最好的方法是"当你去的时候"手动方法确保每当进行影响架构或参考数据的实体更改时,非破坏性更新脚本都会提交源代码控制 - 但如前所述,这将需要一些纪律和/或记录的流程供所有团队成员遵循

答案 1 :(得分:1)

对于第一个迁移文件,您只需要数据库的当前ddl。有许多工具可以为您提供(例如,IntelliJ IDEA数据库工具中的" copy ddl"选项或数据库供应商的GUI客户端)。

答案 2 :(得分:0)

我不确定Flyway但是有另一种方法,你可以使用ant任务来生成或更新模式。

希望它有所帮助。

答案 3 :(得分:0)

如果使用Maven构建项目,则可以使用Hibernate maven plugin