2012-04-11 62 views
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> 

我已经吃不工作,我会加载使用“更新”数据源的方法设置,然后删除表格如果它们在尝试加载新数据之前存在。但是 - 表格不再用于写入数据!

预先感谢

西蒙

回答

0

可以传递JPA从Spring配置,而不是persistance.xml和使用占位符可以由PlaceholderConfigurer被配置属性(可能系统的属性=“覆盖”),或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" /> 
+0

美丽 - 谢谢 – totalcruise 2012-04-11 15:00:21