大家好
我想知道是否可以通过实体管理器获取数据库连接属性。
我的 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/