我在JAR项目中使用JPA并使用persistence.xml来设置我的EntityManager。JPA:从属性创建EntityManagerFactory
但是由于persistence.xml在构建之后位于JAR内部,因此用户之后更改设置非常复杂。所以我正在寻找一个解决方案,我可以通过在运行时加载的propertyfile来配置我的连接。
我在网络上对这个解决方案来:
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我还通过声明模式名映射文件:
的persistence.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>
所以我的问题基本上是:是否有一个属性,我可以用它来在运行时设置架构,就像我对其他属性做的一样?
或者还有更好的解决方案吗?
在此先感谢!
所以你是在调暗黑暗面,是吗? ;) –