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

标签 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://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>

提前致谢!

最佳答案

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

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

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

provider.createEntityManagerFactory(persistenceUnitInfo, getJpaPropertyMap())

关于java - java独立应用程序中环境特定的持久性xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10482927/

相关文章:

java - 在另一个 spring bean 中声明了 spring bean

java - 致命异常 : org. apache.http.impl.conn.SingleClientConnManager.finalize() 在 10 秒后超时

java - JFrame 在frame.pack() 上热更改大小

java - hibernate 跳过并采取一些行

java - ValidationException 异常说明 : uses a non-entity as target entity in the relationship attribute

java - android java设置修复微调器的默认值

java - 如何通过Map方式向HIbernate 5提供实体包?

java - 使用 spring-data 和 jpa 切换 fetch 模式

java - 在 hibernate 中加入复合主键的某个属性

java - "ERROR: You have an error in your SQL syntax;"in hibernate 一对多关系映射