4

META-INF/ フォルダーに persistence.xml があります。

<persistence-unit name="dev" transaction-type="RESOURCE_LOCAL">
<properties>
  <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/events" />
  <property name="javax.persistence.jdbc.user" value="postgres" />
  <property name="javax.persistence.jdbc.password" value="" />
  <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
  <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
  <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" />
  <property name="hibernate.show_sql" value="false" />
</properties>
</persistence-unit>

Javaコードでは、そのpersistence.xmlからエンティティマネージャーfacotryを作成します

_emf = Persistence.createEntityManagerFactory("dev");
_em = _emf.createEntityManager();

ただし、テストのために jdbc url/user/password のみを動的に変更したいのですが、これらのパラメーターを構成ファイルに保存し、必要に応じて読み取ることを計画しています。 xml? したがって、次のようになります。

_emf = Persistence.createEntityManagerFactory("dev");
_emf.setProperties("url", "test_url");
    ... other setts here ...
_em = _emf.createEntityManager();

ありがとう

4

1 に答える 1

13

EntityManagerFactory を作成するとき、persistence.xml で定義されているものをオーバーライドする一連のプロパティを渡すことができます。

Properties props = new Properties();
props.setProperty("javax.persistence.jdbc.url", "test_url");
_emf = Persistence.createEntityManagerFactory("dev", props);

EntityManagerFactory の作成後に接続プロパティを変更する場合は、再度呼び出して再作成する必要がありますcreateEntityManagerFactory()

于 2013-11-04T18:11:20.833 に答える