5

我在使用 liquibase 和 hibernate 时遇到了一个小问题。我希望 hibernate 在 hbm2ddl 设置为创建时创建架构,然后让 liquibase 使用 sql 脚本文件填充数据库。
我注意到,在验证时它的行为与描述和创建时不同,尤其是在使用 hsqldb(在内存中)的测试环境中。那时我似乎是盲目的。

有没有办法让我预期的与 hsqldb 一起工作,就像在 hibernate 创建它之后填充数据库一样。感谢您阅读本文。

4

1 回答 1

6

Liquibase 最好用作 hbm2ddl 的替代品。这样,您可以在数据库处于适合该数据的状态时进行数据填充,并且以后的变更集可以升级您插入的数据以及其他更改。如果您先运行 hbm2ddl,然后运行 ​​liquibase 来填充数据,您将需要始终对插入数据结构进行更改。

使用 hibernate 和 liquibase 的一种方法是在开发期间使用 ant 或 maven 下的 liquibase diff 工具,根据数据库和 hibernate 模型之间的差异附加到更改日志文件。确保检查它正在尝试做什么,因为它并不总是你所期望的(它决定删除并添加一列而不是重命名它)。创建更改日志文件后,您可以像运行任何更改日志文件一样运行它,例如,在应用启动时将其传递给 liquibase spring bean。您不需要同时使用 hbm2ddl 和 liquibase,因为 liquibase 使用 hbm2ddl 来生成 liquibase 比较您当前数据库的休眠“数据库”。

有了这个,你的步骤是:

  1. 更改您的休眠模型
  2. 在 hibernate 和现有数据库之间运行 liquibase diff
  3. 检查您的新 liquibase 变更集
  4. 对数据库执行 liquibase 脚本

唯一的问题可能是 maven 可能不支持 hibernate diff 工具,就像在 ant 和命令行中一样,尤其是在 1.9 中。

如果您不想处理 liquibase diff 工具,您始终可以手动将 changeSets 附加到每个更改的更改日志文件中。XML 格式旨在易于手动使用。在这种情况下,您的步骤是:

  1. 更改您的休眠模型
  2. 将所需的更改集添加到您的更改日志文件
  3. 对数据库执行 liquibase 脚本
  4. 测试并重复
于 2010-08-21T18:44:30.477 回答