java - 如何从实体管理器获取 jpa 数据源属性

标签 java jpa entitymanager jta

大家好

我想知道是否可以通过实体管理器获取数据库连接属性。

我的 persistence.xml 看起来像这样

<persistence ...>
     <persistence-unit name="default" transaction-type="JTA">
          <jta-data-source>DatasourceForTestSystem</jta-data-source>
          <class> some.package.and.some.Class </class>
          ...
     </persistence-unit>
</persistence>

我想要类似的东西

String host = em.getSomeFunction().getProperties().get("server");
String database = em.getSomeFunction().getProperties().get("database");
or
String url = em.getSomeFunction().getConnectionPool().getURL();

其中 url 类似于 jdbc:oracle:thin:@1.2.3.4:5678:database。 我将 JDeveloper 12c 与 EclipseLink、Oracle 数据库和无 Hibernate 结合使用。

有人知道如何获取有关连接属性的信息吗?

亲切的问候,

史蒂夫

-- 更新--

@Kostja:再次感谢您的帮助,但正如我在帖子中提到的,我根本不使用 Hibernate。

我已经尝试过像这样使用 Connection.class

java.sql.Connection conn = em.unwrap(java.sql.Connection.class);

来自 here .在此声明中,我总是为 Connection 和 getSession() 获得 NPE

((JNDIConnector)em.unwrap(JpaEntityManager.class)
    .getSession().getLogin().getConnector()).getName();

来自 here .

我很困惑为什么这些解决方案对我有用。也许我遗漏了什么:-(

最佳答案

使用 JPA 最多只能查询 EntityManagerFactory 的属性或 Connection .可用属性列表因提供者和单个提供者的不同版本而异。

像这样访问 EMF 的属性:

Map<String,Object> props = emf.getProperties();

获取 Connection 涉及更多,并且取决于 JPA 实现。这可能适用于 Hibernate,courtesy @Augusto :

EntityManagerFactory 转换为 HibernateEntityManagerFactory, 调用getSessionFactory()并将其转换为SessionFactoryImpl,调用getConnectionProvider()

connectionProvder.getConnection();

关于java - 如何从实体管理器获取 jpa 数据源属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20704061/

相关文章:

Hibernate Jpa注解: Problem with Embedded Id

java - Spring Batch 与 HazelCast 集成

java - 这个 interrupt() 有必要吗?

hibernate - 生命周期异常 : Failed to start component deploying war in Tomcat

hibernate - 如何使用 JPA EntityManager 注册自定义 Hibernate IdentifierGenerator?

hibernate - 在 hibernate 验证期间执行 EntityManager 查询的正确方法

hibernate - 使用 CriteriaQuery 和 EntityManager(Hibernate) 进行查询

java - 管理多个上传文件到mysql db

java - 在Eclipse(weka)中生成ROC曲线

hibernate - Hibernate JPA - 插入记录时序列变为负数