2012-04-11 26 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