【问题标题】:Flyway Spring JPA2 integration - possible to keep schema validation?Flyway Spring JPA2 集成 - 可以保持模式验证吗?
【发布时间】:2016-08-28 10:49:56
【问题描述】:

嗨,我有一个 Web 应用程序,我正在尝试集成 JPA2(Hibernate)+Spring+Flyway

我像这样在我的 ApplicationContext 中添加了 flyway:

<bean id="flyway" class="org.flywaydb.core.Flyway" init-method="migrate">
    <property name="baselineOnMigrate" value="true" />
    <property name="dataSource" ref="dataSource" />
</bean>

理论上这可以正常工作,并使用我保存在 db/migration 下的脚本更新架构。到目前为止一切顺利。

留给我的一个问题是,如果我更改某些内容(例如,将字符串字段添加到实体),应用程序甚至不会走到这一步,因为 Hibernates Schema-Validator 会抛出如下内容:原因:org.hibernate.HibernateException:缺少列:demo.testEntity 中的 showCaseField。发生这种情况是因为我已将“hibernate.hbm2ddl.auto”设置为“验证”

现在我读到了 Hibernate 在某些(罕见?)情况下无法识别完美有效模式的信息,并且我可能(或不)有一天会完全禁用此功能。但截至目前,我实际上喜欢额外验证并且不想将其关闭。

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

有什么想法吗?

【问题讨论】:

    标签: spring hibernate jpa-2.0 flyway


    【解决方案1】:

    现在找到答案了。基本上你所要做的就是让你的 entityManagerFactory-bean 依赖你的 Flyway bean(有一个属性)。现在 Flyway(以及你的数据源)首先被初始化,并且 Flyway 脚本在 Hibernates 模式验证之前执行

    <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>
    

    【讨论】:

      猜你喜欢
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 2015-05-29
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多