0

我正在尝试创建一个应用程序引导程序,如果它们存在,它将删除应用程序中的所有表,然后用新数据初始化它们。

我创建了一个加载数据源上下文的 Spring 上下文 - 但是我不知道如何覆盖数据源的初始化,以便可以根据数据源的加载方式自定义行为。所以.. 使用 Hibernate 作为我的 JPA 实现..

如果数据源是从应用程序加载的 - 那么我希望更新模式:

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

我一直采用的方法不起作用,因为我将使用“更新”设置加载数据源,然后在尝试加载新数据之前删除表(如果存在)。但是 - 不再存在用于写入数据的表!

提前致谢

西蒙

4

1 回答 1

0

您可以从 Spring 配置中传递 JPA 属性,而不是persistance.xml使用可以由 PlaceholderConfigurer(可能是 system-properties="OVERRIDE")或 Spring 配置文件(自 3.1 起)或使用 Maven 过滤配置的占位符:

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