用于删除表的Spring Bootstrap Context应该存在

时间:2012-04-11 11:46:58

标签: java spring hibernate jpa spring-jdbc

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

我创建了一个加载数据源上下文的Spring Context - 但是我不知道如何覆盖数据源的初始化,以便可以根据数据源的加载方式自定义行为。所以..使用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>

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

提前致谢

西蒙

1 个答案:

答案 0 :(得分:0)

您可以从Spring配置而不是persistance.xml传递JPA属性,并使用可由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" />