我在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>
所以我的問題基本上是:是否有一個屬性,我可以用它來在運行時設置架構,就像我對其他屬性做的一樣?
或者還有更好的解決方案嗎?
在此先感謝!
所以你是在調暗黑暗面,是嗎? ;) –