spring 休眠时无法使用 Liquibase

Can't get work Liquibase with spring hibernate

到目前为止,我已经将 liquibase 与 spring 和标准更新日志文件一起使用。现在我想将它集成到休眠状态,所以当我对实体进行任何更改时,它应该更改 tables 并更新更改日志 table.

我阅读了很多示例和教程,但无法正常工作。

我使用数据源,entityManagerFactory(denepds-on="liquibase") 一切正常。但是当我添加 liquibase bean 时,它不会从实体更改数据库。并抛出 "no table with name" 异常。

如何使用 liquibase-hibernate4 和 spring 配置 Liquibase?

我的 liquibase bean:

<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
      <property name="dataSource" ref="myJdbcDataSource" />
      <property name="beanName" value="entityManagerFactory" />
      <property name="changeLog" value="classpath:databaseChangeLog.sql" />
</bean>

我刚刚添加了 beanName prop 作为 entityManagerFactory 来自:https://github.com/liquibase/liquibase-hibernate/wiki, http://www.liquibase.org/documentation/spring.html。并做了我可以从这篇文章中理解的内容。

在这篇文章中,它提到我们应该使用三种变体中的一种

hibernate:spring:com/example/spring.xml?bean=sessionFactory
hibernate:spring:com.example?dialect=org.hibernate.dialect.MySQL5Dialect
hibernate:spring:com.example.employee,com.example.auction?dialect=org.hibernate.dialect.MySQL5Dialect

但我不知道如何在我们使用 spring

时将它与 liquibase bean 一起使用

我使用 Spring, Liquibase nad Hibernate 多年,我不建议您随意使用它。我的经验告诉我,让 Hibernate 自动更改数据库并不是一个好主意。

我不介意更改是由休眠使用 hbm2ddl 计算的,还是通过最终从休眠计算数据库更改的 liquibase 计算的。在将这些更改合并到您的更改日志之前,您更愿意监督这些更改。

因此,在我的例子中,我更喜欢配置 liquibase(使用 maven)自动写入更新日志,该更新日志是通过将我的休眠映射与数据库进行比较而获得的(我称之为自动更新日志)。然后我在将它与我的更改日志合并之前手动检查该更改集。

当然,您可以使用 SpringLiquibase bean 在每次启动应用程序时自动 运行 liquibase 更新,这是开箱即用的,但在不同环境下工作时要小心,您可能 运行 一个不需要的更新 ...

也许您会找到您感兴趣的 post http://malaguna.github.io/blog/2015/06/09/liquifying-your-project/

这里描述了我如何使用 Spring、Hibernate 和 Liquibase,正如我告诉你的那样。