2014-06-22 59 views
0

我有很多項目的Eclipse工作區,一個項目「shareddata」包含了我所有的JPA實體,服務的persistence.xml(使用彈簧數據)這樣的。在我的其他項目中,我在maven pom.xml中包含「shareddata」作爲依賴項。動態禁用hbm2ddl.auto?

當我啓動其他項目之一,JPA /休眠驗證並更新我的數據庫表(hbm2ddl.auto = TRUE)。這很好地工作。

但需要啓動的幾個項目,所有包括「shareddata」項目來測試我的整個項目。所以每個項目都會驗證並更新我的數據庫表。這需要相當長的時間。

是否有可能僅僅是爲了使「hbm​​2ddl.auto」爲一個單一的項目?或者是否可以在應用程序啓動時動態禁用「hbm2ddl.auto」?

如果這是可能比我啓動我的JMS服務器項目,並進行數據庫驗證。接下來,我啓動我的其他項目(tomcat和幾個服務器應用程序),他們不會做數據庫驗證。

爲我節省了很多時間:-)

回答

1

我沒有通過系統屬性這樣的事情。不幸的是我不知道你如何初始化hibernate上下文。我個人通過Spring做到了使用${propName}語法支持系統性能。如果你可以使用這種表示法,只需在你的配置文件中使用它,並在單元測試開始時設置合適的屬性。

+0

乾杯,你的回覆讓我看看jpa初始化的地方,我在任何地方都使用相同的xml,並且從來沒有打擾過看它實際做了什麼,導致它一直工作。最後我發現LocalContainerEntityManagerFactoryBean做了初始化。我會發佈一個答案的細節。 – TinusSky

0

花了一點時間才弄明白,但jpa是在我的applicationContext.xml(或像root-context.xml之類的變體)中配置的。 LocalContainerEntityManagerFactoryBean執行初始化。

Lucky LocalContainerEntityManagerFactoryBean接受似乎覆蓋persistence.xml中設置的值的參數。所以我設置hibernate.hbm2ddl.auto爲無persistence.xml中,並使用以下XML來實現hibernate.hbm2ddl.auto特定項目:

<!-- Add JPA support --> 
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="loadTimeWeaver"> 
     <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> 
    </property> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
     </props> 
    </property> 
</bean> 

希望這可以幫助別人同樣的問題。