java独立应用程序中特定于环境的持久性xml

java独立应用程序中特定于环境的持久性xml,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个独立的java应用程序,它使用JPA进行持久化。 现在我在META-INF中有一个persistence.xml。我的应用程序目前正在开发中。 我的问题是,如果我从开发转移到下一个环境,QA说。我必须修改persistence.xml并重建jar。这样做对吗? 如果没有,如果我将连接属性移动到另一个文件,该文件应该放在哪里 <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://w

我有一个独立的java应用程序,它使用JPA进行持久化。 现在我在META-INF中有一个persistence.xml。我的应用程序目前正在开发中。 我的问题是,如果我从开发转移到下一个环境,QA说。我必须修改persistence.xml并重建jar。这样做对吗? 如果没有,如果我将连接属性移动到另一个文件,该文件应该放在哪里

<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>

org.hibernate.ejb.HibernatePersistence
甲级
B类
C类
D类

提前谢谢

这是个好问题。通常,您将所有这些环境设置放在一个外部文件中,比如application.properties,并在启动应用程序时将位置传递给JVM(例如
-Dconfig.location=/conf/

然后,您应该找到一种方法,将外部化属性放入您的
EntityManagerFactory
。在persistence.xml中不能这样做,只能在那里硬编码。但是,在创建实体管理器工厂时,可以通过传递供应商属性来实现这一点

例如,如果使用像spring这样的框架,这将更容易做到,因为spring为实体管理器提供了一个工厂bean。否则你应该自己处理。以下是spring的相关内容:

provider.createEntityManagerFactory(persistenceUnitInfo, getJpaPropertyMap())

这是个好问题。通常,您将所有这些环境设置放在一个外部文件中,比如application.properties,并在启动应用程序时将位置传递给JVM(例如
-Dconfig.location=/conf/

然后,您应该找到一种方法,将外部化属性放入您的
EntityManagerFactory
。在persistence.xml中不能这样做,只能在那里硬编码。但是,在创建实体管理器工厂时,可以通过传递供应商属性来实现这一点

例如,如果使用像spring这样的框架,这将更容易做到,因为spring为实体管理器提供了一个工厂bean。否则你应该自己处理。以下是spring的相关内容:

provider.createEntityManagerFactory(persistenceUnitInfo, getJpaPropertyMap())

非常感谢您的回复。我实际上在使用Spring。我将尝试进行您建议的更改,并在可行的情况下更新此线程。再次感谢这是您设置自定义属性的地方感谢您的回复。我实际上使用的是Spring。我将尝试进行您建议的更改,并在可行的情况下更新此线程。再次感谢这是设置自定义属性的地方