2016-05-03 8 views
1

のHy、私はJPA2(休止状態)を統合しようとしているwebアプリケーションを持っ+春+フライウェイFlyway Spring JPA2の統合 - スキーマの検証を可能にする?

私はこのように私のApplicationContextにフライウェイを追加しました:

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

を理論的に、これは正常に動作してスキーマを更新私はdb/migrationの下に保存するスクリプトを使用します。ここまでは順調ですね。

私に残る1つの問題は、もし何かを変更した場合(EntityにStringフィールドを追加するなど)、Hibernate Schema-Validatorが次のようなものをスローするため、アプリケーションはこれを取得しません。by:org.hibernate.HibernateException:欠けている列:showCaseField in demo.testEntity。これは、 "hibernate.hbm2ddl.auto"を "validate"に設定しているために発生します。

これで、Hibernateがいくつかの(まれな)ケースで完全な有効なスキーマを認識できず、いつか私はこの機能を完全に無効にします。しかし今のところ、私は実際に余分な検証が好きで、それをオフにしたくない。

Hibernate-Schema-Validationを維持しながらSpringとFlywayを統合することは可能ですか? FlywayはDataSource-beanなどに依存している可能性があり、結局applicationContextを完全に初期化する必要があるため、Hibernateはスキーマの不一致のためにこれを防ぐ必要があるため、これは問題になると思います。

アイデア?

答えて

0

今すぐ回答が見つかりました。基本的には、entityManagerFactory-beanをにすることは、あなたのFlyway beanにはに依存しているだけです(それには属性があります)。今すぐFlyway(そしてあなたのdataSource)が最初に初期化され、Hibernateスキーマの検証前に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> 
関連する問題