hibernate hbm2ddl create 是否有任何 liquibase 问题?

bla*_*sei 5 java hibernate hsqldb liquibase

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

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

Nat*_*and 6

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

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

有了这个,你的步骤是:

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

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

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

  1. 更改您的休眠模型
  2. 将所需的变更集添加到您的变更日志文件
  3. 针对数据库执行您的 liquibase 脚本
  4. 测试并重复