0

アプリケーション内のすべてのテーブルが存在する場合はそれらを削除し、新しいデータでそれらを初期化するアプリケーションブートストラップを作成しようとしています。

データソースコンテキストをロードするSpringコンテキストを作成しましたが、データソースのロード方法に応じて動作をカスタマイズできるように、データソースの初期化をオーバーライドする方法がわかりません。つまり、JPA実装としてHibernateを使用しています。

データソースがアプリケーションからロードされる場合、スキーマを更新したいと思います。

    <persistence-unit name="myDB" transaction-type="RESOURCE_LOCAL">
    <properties>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
</persistence-unit>

データソースがブートストラップからロードされる場合、新しいデータがロードされる前にデータベースが常に最初から作成されるように、この動作を何らかの方法でオーバーロードする必要があります。

    <persistence-unit name="myDB" transaction-type="RESOURCE_LOCAL">
    <properties>
        <property name="hibernate.hbm2ddl.auto" value="create"/>
    </properties>
</persistence-unit>

'update'設定を使用してデータソースをロードし、新しいデータをロードする前にテーブルが存在する場合はそれらを削除するため、私が採用しているアプローチは機能しません。ただし、データを書き込むためのテーブルはもう存在しません。

前もって感謝します

サイモン

4

1 に答える 1

0

persistance.xmlPlaceholderConfigurer (おそらく system-properties="OVERRIDE")、Spring プロファイル (3.1 以降)、または Maven フィルタリングを使用して構成できるプレースホルダーの代わりに、Spring 構成から JPA プロパティを渡して使用できます。

<util:map id="jpaPropertyMap" key-type="java.lang.String" value-type="java.lang.Object">
    <entry key="hibernate.hbm2ddl.auto" value="${database.ddl.mode}" />
</util:map>

<bean id="managementEntityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
    p:dataSource-ref="dataSource"
    p:jpaPropertyMap-ref="jpaPropertyMap" />
于 2012-04-11T14:06:39.307 に答える