【问题标题】:is there any liquibase issue with hibernate hbm2ddl create?hibernate hbm2ddl create 是否有任何 liquibase 问题?
【发布时间】:2011-04-01 07:15:53
【问题描述】:

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

有没有办法让我的预期工作与 hsqldb 一起在休眠创建后填充数据库。感谢您阅读本文。

【问题讨论】:

  • 应该如何在您的设置中触发 liquibase?
  • 嗨帕斯卡!好吧,这有点complex architecture,但我会尽力解释。这是3 subprojects.dblayerservicelayerwebapp 中的maven+spring+hibernate 项目。所以假设testdbconfig 用于测试类上下文,webapp 使用了真正的dbconfigdblayer 做 db 的东西,所以我在 spring.testdbconfig 中使用 liquibase 从资源文件夹(dblayer 项目)中的属性文件中选择属性,并且出于某种原因使用 testdbconfig+liquibase+hsqldb+hbm2ddl=create 构建 dblayer 有效。
  • 所有 modules(db+service) 都在 webapp pom 中,因此它们的上下文被导入 webbappconfig。集成测试使用真实配置运行,这些配置脚本在 webapps.building带有 maven 命令的 webapp 还运行集成测试,它使用真正的 configs.in webapp 属性文件中 dbconfig(不是 testconfig)的相同值,如 testconfig dbconfig+liquibase+hsqldb+hbm2ddl=create 似乎没有污染数据库,所以我的集成测试失败了。尝试使用mysql,它只验证让数据填充。我解释得好吗?感谢阅读本文
  • 我认为你做得相当不错,而且确实是一个复杂的设置。可悲的是,我对liquibase+spring+hbm2ddl 没有任何经验(顺便说一下,liquibase 不应该是a replacement for hbm2ddl 吗?)恐怕我在这里不会很有帮助。我想它们在testdbconfigdbconfig 之间没有任何明显的区别(因为这是判别部分)。

标签: java hibernate hsqldb liquibase


【解决方案1】:

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. 测试并重复

【讨论】:

  • 谢谢内森!!我现在明白了。这就是我现在正在做的事情。我从 sping 上下文中删除了 hbm2ddl。然后我包含了架构更改日志以创建表,然后包含了包含插入语句(和 csv 文件)的更改日志。工作完美。谢谢你们真的非常感谢
猜你喜欢
  • 2011-07-31
  • 1970-01-01
  • 2013-05-14
  • 2013-02-16
  • 2011-11-06
  • 1970-01-01
  • 2016-06-06
  • 2021-06-04
  • 2011-01-09
相关资源
最近更新 更多