Flyway Spring JPA2集成 - 可以保持架构验证吗?

时间:2016-05-03 11:48:51

标签: spring hibernate jpa-2.0 flyway

Hy,我有一个webapplication,我正在尝试集成JPA2(Hibernate)+ Spring + Flyway

我将flyway添加到我的ApplicationContext中,如下所示:

stringr

从理论上讲,这可以正常工作,并使用我在db / migration下保存的脚本更新模式。到目前为止一切都很好。

留给我的一个问题是,如果我改变一些东西(例如向实体添加一个字符串字段),应用程序甚至不会得到这么远,因为Hibernates Schema-Validator会抛出这样的东西:< strong>引起:org.hibernate.HibernateException:缺少列:demo.testEntity中的showCaseField 。发生这种情况是因为我已经设置了&#34; hibernate.hbm2ddl.auto&#34;到&#34;验证&#34;

现在我已经读过关于Hibernate在某些(罕见?)情况下无法识别perfeclty有效模式的情况,并且我可能(或不)在某一天达到某一点我完全禁用此功能。但截至目前,我实际上喜欢额外验证,并且不想关闭它。

是否可以在保持Hibernates-Schema-Validation的同时集成Spring和Flyway?我想这可能是一个问题,因为Flyway可能依赖于DataSource-bean或者其他东西,并且总的来说需要完全初始化applicationContext,而Hibernate又会因为模式不匹配而阻止它。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

现在找到答案。基本上你所要做的就是让你的entityManagerFactory-bean 依赖于你的Flyway bean(有一个属性)。现在首先初始化Flyway(以及你的dataSource),然后在Hibernates模式验证之前执行Flyway-Scripts

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
    depends-on="flyway"> ....
</bean>
<bean id="flyway" class="org.flywaydb.core.Flyway" init-method="migrate">
    <property name="baselineOnMigrate" value="true"/>
    <property name="dataSource" ref="dataSource"/>
</bean>