到目前为止,我已经将liquibase与spring和标准的changelog文件一起使用。现在我想将它集成到hibernate中,这样当我对实体进行任何更改时,它应该更改表并更新changelog表。
我读了很多例子和教程,但都没能成功。
我使用数据源entityManagerFactory(denepds on="liquibase"),一切都很好。但当我添加liquibasebean时,它不会从实体更改数据库。并且抛出"no table with name"异常。
如何将Liquibase与Liquibase-hibernate4和spring配置在一起
我的甜酒豆:
<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 时,我不知道如何将其与liquibasebean一起使用
我多年来一直在使用Spring、Liquibase和Hibernate,我不建议您根据需要使用它。我的经验告诉我,让Hibernate自动更改数据库不是一个好主意。
我不介意是使用hbm2ddl
通过hibernate计算更改,还是通过liquibase计算更改,后者最终从hibernate计算数据库更改。您更愿意在将这些更改合并到您的更改日志之前监督这些更改。
因此,在我的情况下,我更喜欢配置likibase(使用maven)来自动编写一个变更日志,该日志是通过将hibernate映射与数据库进行比较而获得的(我称之为autochangelog)。然后,在将其与变更日志合并之前,我手动检查变更集。
当然,你可以使用SpringLiquibasebean在每次启动应用程序时自动运行liquibase更新,这是开箱即用的,但在不同环境下工作时要小心,你可能会运行不需要的更新。。。
也许你可以找到你感兴趣的帖子http://malaguna.github.io/blog/2015/06/09/liquifying-your-project/
这里描述了我如何使用Spring、Hibernate和Liquibase,正如我告诉你的那样。