JAR プロジェクトで JPA を使用しており、persistence.xml を使用して EntityManager をセットアップしました。
しかし、persistence.xml はビルド後に JAR 内にあるため、後でユーザーが設定を変更するのは非常に複雑です。だから私は、実行時にロードされるプロパティファイルを介して接続を構成できるソリューションを探しています。
Webでこのソリューションに出会いました:
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);
これは私が探していたソリューションですが、ここで1つ欠けています:私の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>
したがって、私の質問は基本的に次のとおりです。他のプロパティと同じように、実行時にスキーマを設定するために使用できるプロパティはありますか?
それとももっと良い解決策がありますか?
前もって感謝します!