当前位置: 首页 > 面试题库 >

从persistence.xml创建实体管理器工厂后如何修改属性

公孙宗清
2023-03-14
问题内容

我在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以进行测试,我的计划是将这些参数保存在配置文件中,并根据需要读取它们,所以有没有一种方法可以在我从持久性创建了objectmanagerfactory之后更新它们。
XML?所以它是这样的:

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

谢谢


问题答案:

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

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

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



 类似资料:
  • http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“> 但面对这个例外: 任何帮助都将不胜感激...

  • 我有一个Java7/Spring3.2.17应用程序,它必须连接到两个不同的数据库,因此我有两个不同的persistence.xml文件,每个文件都声明自己的持久性单元。 在我的DAO类中,我只是让Spring注入实体管理器: Spring抱怨我有两个EM工厂,所以它不知道该用哪一个: NouniqueBeanDefinitionException:未定义[javax.persistence.En

  • 问题内容: 一个很长的问题,请忍受我。 我们将Spring + JPA用于Web应用程序。我的团队在讨论如何在注入的(基于泛型的东西对AppFuse中提供的线DAO,我们不使用过的注射某种原因)。我们正在使用“应用程序管理的持久性”。 反对注入a的论点是它太重了,因此不是必需的,这就是我们需要的。而且,由于Spring将为每个Web请求创建一个DAO的新实例(我对此表示怀疑),因此不会有任何并发​

  • 我将OWLAPI与HermiT一起使用,除非在创建了推理器之后尝试修改本体,否则它是有效的。

  • 在IBM WebSphere application Server was 7中启动EJB应用程序时,我遇到了以下错误。 JPAPUnitInfo E CWWJP0015E:org.hibernate.ejb.HibernatePersistence 持久性提供程序在尝试为 *YOUR_PERSISTENCE_UNIT* 持久性单元创建容器实体管理器工厂时出错。出现以下错误: [持久性单位: *Y

  • 编辑:堆栈跟踪如下: 下面是persistence.xml: