是否有hibernate hbm2ddl创建的liquibase问题?

时间:2010-08-19 18:35:03

标签: java hibernate hsqldb liquibase

我对liquibase和hibernate有一个轻微的问题。我希望hibernate在hbm2ddl设置为create时创建模式,然后让liquibase使用sql脚本文件对数据库进行处理。
我注意到,在启用时,它表现为描述,而在创建时则不然 特别是在使用hsqldb(在内存中)的测试环境中。我似乎是盲目的。

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

1 个答案:

答案 0 :(得分:3)

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

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

有了这个,你的步骤是:

  1. 更改您的休眠模型
  2. 在hibernate和现有数据库之间运行liquibase diff
  3. 检查您的新liquibase changeSets
  4. 针对数据库执行liquibase脚本
  5. 唯一的问题可能是maven不支持hibernate diff工具,就像在ant和命令行中一样,特别是在1.9中。

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

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