【问题标题】:How to get Hibernate configuration properties?如何获取 Hibernate 配置属性?
【发布时间】:2009-11-17 13:37:55
【问题描述】:

我在 jpa 中使用 hibernate,它是用 persistence.xml 配置的 是否可以从 Web 应用程序获取休眠连接属性?

谢谢。

【问题讨论】:

    标签: hibernate web-applications jta


    【解决方案1】:

    如果不使用反射并依靠 Hibernate 将来不会破坏您的代码,可能不会。您需要从 SessionFactory 获取属性,但它不是公开的,因此您必须通过反射找到 Field,然后使用 field.setAccessible 来访问它。比如:

    Field f = SessionFactoryImpl.class.getDeclaredField("properties");
    f.setAccessible(true);
    Properties p = (Properties)f.get(sessionFactory);
    

    然后使用Environment中的常量拉出相关设置。如果您正在寻找实际的数据库连接设置并且您的应用正在使用 jndi,那么您可以使用 jndi 名称来获取 DataSource 并检查它以获取连接信息。

    对于这种类型的事情,我通常只是使用调试器,设置一个断点,然后遍历变量,直到找到信息所在的位置;然后查看它是否公开可用,如果没有,请使用反射来获取它。但没有任何保证。

    【讨论】:

    • sessionFactory 无法解析为变量。我怎样才能得到一个?我通过 SessionFactory* 类搜索以获取实例,但我不知道自己在做什么。我手头只有一个 javax.persistance.EntityManager
    • 我没有用过EntityManager,但是看起来Hibernate的实现是HibernateEntityManager,它有一个getSession方法。一旦你有了会话,你就可以得到 SessionFactory。所以像 ((HibernateEntityManager)entityManager).getSession().getSessionFactory()
    【解决方案2】:

    如果您使用 JDBC,您始终可以获取连接及其元数据。如果您使用的是 Spring 事务管理器,您可以像这样得到它:

    transactionManager.getDataSource().getConnection().getMetaData()
    

    这显示tons of information 关于您的数据库及其连接,包括用户名。 persistence.xml 中有一些信息可能处理数据库连接池,这些信息通常不存储在 Hibernate 中的任何位置,而是存储在实际的连接池代码中。

    您需要从 persistence.xml 文件中获取哪些信息?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多