2012-05-07 67 views
1

我有一個獨立的java應用程序,它使用JPA作爲其持久性。 現在我在META-INF中有一個persistence.xml.My應用程序目前正在開發中。 我的問題是,如果我從發展轉向下一個環境,比如QA。我必須修改persistence.xml並重建jar。這是否正確? 如果沒有,如果我將連接屬性移動到不同的文件,該文件應該放在哪裏?java獨立應用程序中特定於環境的持久性xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> 
    <persistence-unit name="pu1" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>ClassA</class> 
     <class>ClassB</class> 
     <class>ClassC</class> 
     <class>ClassD</class> 


     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" /> 
      <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver" /> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.connection.username" value="username" /> 
      <property name="hibernate.connection.password" value="password" /> 
      <property name="hibernate.connection.url" 
       value="url" /> 
      <property name="hibernate.max_fetch_depth" value="3" /> 
      <property name="hibernate.archive.autodetection" value="class" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

在此先感謝!

回答

3

這是一個很好的問題。通常情況下,你把所有這些環境設置在一個外部文件,說application.properties,並通過位置,它的JVM,當你啓動應用程序(如-Dconfig.location=/conf/

那麼你應該找到一種方式來獲得外部化物業進入你的EntityManagerFactory。你不能在persistence.xml中做到這一點,你只能在那裏硬編碼的東西。但是,通過傳遞供應商屬性創建實體管理器工廠時,您可以執行此操作。

如果使用像spring這樣的框架,比較容易,因爲spring會爲實體管理器提供一個工廠bean。否則,你應該自己處理它。這裏是從春天的相關位:

provider.createEntityManagerFactory(persistenceUnitInfo, getJpaPropertyMap()) 
+0

非常感謝您的答覆。我實際上使用Spring.I'll會嘗試進行更改您建議並更新此線程,如果它的工作。再次感謝 ! – user1260109

+0

.. - 這是您設置您的自定義屬性的地方 – Bozho

+0

謝謝...這工作! – user1260109