【问题标题】:Can't get work Liquibase with spring hibernate无法使用 Spring Hibernate 工作 Liquibase
【发布时间】:2016-01-10 13:02:52
【问题描述】:

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

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

我使用数据源,entityManagerFactory(denepds-on="liquibase") 一切正常。但是当我添加 liquibase bean 时,它不会从实体更改数据库。并抛出“没有名称的表”异常。

如何使用 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 属性添加为 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一起使用

【问题讨论】:

    标签: java spring hibernate liquibase liquibase-hibernate


    【解决方案1】:

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

    我不介意更改是通过 hibernate 使用hbm2ddl 计算的,还是通过 liquibase 计算的,最终计算来自 hibernate 的数据库更改。您宁愿先监督这些更改,然后再将它们合并到您的更改日志中。

    因此,在我的情况下,我更喜欢配置 liquibase(使用 maven)自动编写通过将我的休眠映射与数据库进行比较而获得的更改日志(我称之为 autochangelog)。然后我在将其与我的变更日志合并之前手动检查该变更集。

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

    也许你可以找到你感兴趣的帖子http://malaguna.github.io/blog/2015/06/09/liquifying-your-project/

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

    【讨论】:

    • 谢谢@malaguna,现在我明白了。但是出于好奇,是否可以按照我的要求进行操作(配置并运行 liquibase diff,在 spring 启动时更新)。如果是,我们怎样才能做到这一点?
    • 恐怕你不能,至少你想要它。您可以在liquibase.properties 中设置diffChangeLogFile 以直接指向您的更改日志(我不推荐您)这样您就可以直接将您的diffs 放入您的changelog。但是Spring Liquibase bean不计算差异,我认为它只是为了运行update liquibase 命令。您需要从 maven、eclipse 任务或命令行运行 liquibase diffs。
    • 嗯。我认为我们也可以在 SpringLiquibase 上进行差异化。感谢您的回答
    猜你喜欢
    • 2018-08-19
    • 2017-09-25
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2018-03-20
    • 2018-08-02
    • 2018-08-03
    相关资源
    最近更新 更多