我在使用 liquibase 和 hibernate 时遇到了一个小问题。我希望 hibernate 在 hbm2ddl 设置为创建时创建架构,然后让 liquibase 使用 sql 脚本文件填充数据库。
我注意到,在验证时它的行为与描述和创建时不同,尤其是在使用 hsqldb(在内存中)的测试环境中。那时我似乎是盲目的。
有没有办法让我预期的与 hsqldb 一起工作,就像在 hibernate 创建它之后填充数据库一样。感谢您阅读本文。
Liquibase 最好用作 hbm2ddl 的替代品。这样,您可以在数据库处于适合该数据的状态时进行数据填充,并且以后的变更集可以升级您插入的数据以及其他更改。如果您先运行 hbm2ddl,然后运行 liquibase 来填充数据,您将需要始终对插入数据结构进行更改。
使用 hibernate 和 liquibase 的一种方法是在开发期间使用 ant 或 maven 下的 liquibase diff 工具,根据数据库和 hibernate 模型之间的差异附加到更改日志文件。确保检查它正在尝试做什么,因为它并不总是你所期望的(它决定删除并添加一列而不是重命名它)。创建更改日志文件后,您可以像运行任何更改日志文件一样运行它,例如,在应用启动时将其传递给 liquibase spring bean。您不需要同时使用 hbm2ddl 和 liquibase,因为 liquibase 使用 hbm2ddl 来生成 liquibase 比较您当前数据库的休眠“数据库”。
有了这个,你的步骤是:
唯一的问题可能是 maven 可能不支持 hibernate diff 工具,就像在 ant 和命令行中一样,尤其是在 1.9 中。
如果您不想处理 liquibase diff 工具,您始终可以手动将 changeSets 附加到每个更改的更改日志文件中。XML 格式旨在易于手动使用。在这种情况下,您的步骤是: