我对liquibase和hibernate有一个轻微的问题。我希望hibernate在hbm2ddl设置为create时创建模式,然后让liquibase使用sql脚本文件对数据库进行处理。
我注意到,在启用时,它表现为描述,而在创建时则不然
特别是在使用hsqldb(在内存中)的测试环境中。我似乎是盲目的。
有没有办法让hsqldb的预期工作与hibernate创建后填充数据库一样。感谢您阅读本文。
答案 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“数据库”。
有了这个,你的步骤是:
唯一的问题可能是maven不支持hibernate diff工具,就像在ant和命令行中一样,特别是在1.9中。
如果您不想处理liquibase diff工具,您始终可以手动将changeSets附加到changelog文件中以进行每次更改。 XML格式旨在易于手动使用。在这种情况下,您的步骤是: