我在 JAR 项目中使用 JPA 并使用 persistence.xml 来设置我的 EntityManager。
但由于persistence.xml 在构建后位于JAR 中,因此用户在之后更改设置非常复杂。所以我正在寻找一种解决方案,我可以通过在运行时加载的属性文件来配置我的连接。
我在网上遇到了这个解决方案:
Map properties = new HashMap();
// Configure the internal EclipseLink connection pool
properties.put(JDBC_DRIVER, "oracle.jdbc.OracleDriver");
properties.put(JDBC_URL, "jdbc:oracle:thin:@localhost:1521:ORCL");
properties.put(JDBC_USER, "user-name");
properties.put(JDBC_PASSWORD, "password");
Persistence.createEntityManagerFactory("unit-name", properties);
这是我一直在寻找的解决方案,但我在这里缺少一件事:在我的 persistence.xml 中,我还在映射文件上声明了一个模式名称:
持久性.xml:
<persistence version="2.0" ...>
<persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>...</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url" value="..."/>
<property name="javax.persistence.jdbc.password" value="..."/>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="javax.persistence.jdbc.user" value="..."/>
</properties>
<mapping-file>META-INF/orm.xml</mapping-file>
</persistence-unit>
</persistence>
orm.xml:
<entity-mappings ...>
<persistence-unit-metadata>
<persistence-unit-defaults>
<schema>SCHEMA_NAME</schema>
</persistence-unit-defaults>
</persistence-unit-metadata>
</entity-mappings>
所以我的问题基本上是:是否有一个属性可以用来在运行时设置架构,就像我对其他属性所做的那样?
还是有更好的解决方案?
提前致谢!