【问题标题】:how to modify properties after create entity manager factory from persistence.xml从persistence.xml创建实体管理器工厂后如何修改属性
【发布时间】:2013-11-04 17:17:56
【问题描述】:

我在 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 创建实体管理器工厂

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

但是我只想动态更改 jdbc url/user/password 以进行测试,我的计划是将这些参数保存在配置文件中并根据需要读取它们,所以有没有办法在创建 entitymanagerfactory 后更新它们来自persistence.xml?所以它会这样:

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

谢谢

【问题讨论】:

    标签: hibernate jpa


    【解决方案1】:

    当您创建 EntityManagerFactory 时,您可以传递一组属性,这些属性将覆盖persistence.xml 中定义的内容,例如:

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

    如果要在创建 EntityManagerFactory 后修改连接属性,则必须再次调用 createEntityManagerFactory() 重新创建它。

    【讨论】:

      猜你喜欢
      • 2013-06-01
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 2013-05-17
      • 2020-01-16
      相关资源
      最近更新 更多