春天冬眠

时间:2016-01-10 13:02:52

标签: java spring hibernate liquibase liquibase-hibernate

到目前为止,我已经使用了liquibase和spring以及标准的changelog文件。现在我想将它集成到hibernate中,所以当我对实体进行任何更改时,它应该更改表并更新changelog表。

我阅读了很多示例和教程,并且无法使其工作。

我使用datasource,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 prop添加为:https://github.com/liquibase/liquibase-hibernate/wikihttp://www.liquibase.org/documentation/spring.html中的entityManagerFactory。从这篇文章做了我能理解的事情。

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

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一起使用

1 个答案:

答案 0 :(得分:4)

我使用Spring,Liquibase和Hibernate多年,我不建议你按照自己的意愿使用它。我的经验告诉我,让Hibernate自动更改数据库并不是一个好主意。

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

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

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

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

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

相关问题