2

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

谢谢。

4

2 回答 2

5

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

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

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

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

于 2009-11-17T14:19:09.703 回答
3

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

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

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

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

于 2009-11-17T14:18:09.190 回答