【问题标题】:How to get jpa datasource properties from Entity Manager如何从实体管理器获取 jpa 数据源属性
【发布时间】:2014-01-09 08:11:59
【问题描述】:

大家好

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

我的 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 数据库和无休眠一起使用。

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

亲切的问候,

史蒂芬

-- 更新--

@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

我很困惑为什么这些解决方案都适合我。也许我错过了一些东西:-(

【问题讨论】:

    标签: java jpa entitymanager jta


    【解决方案1】:

    使用 JPA 最多可以查询EntityManagerFactoryConnection 的属性。可用属性列表因提供者以及单个提供者的不同版本而异。

    像这样访问 EMF 的属性:

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

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

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

    connectionProvder.getConnection();
    

    【讨论】:

    • 我已经试过了,只得到了三个属性。它们都没有包含必要的信息。这就是为什么我想知道是否有任何其他方法可以从实体管理器获取主机、端口、数据库用户或其他内容:-(但无论如何感谢您的帮助:-)
    • @Stoffelchen - 你可以试试Connection 接口,它更接近金属。
    • @Stoffelchen - 很抱歉没有提供帮助。我将把我的答案留在这里作为对后代的警告——这不起作用。找到解决方案后,请发布并接受您的解决方案。你得到了我的投票:)
    • 没关系 :-) 你帮了大忙。你让我知道我至少在正确的轨道上!
    猜你喜欢
    • 2022-01-09
    • 2012-05-23
    • 2011-07-08
    • 2013-05-09
    • 2013-12-13
    • 2012-10-08
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    相关资源
    最近更新 更多