如何获取Hibernate配置属性?

时间:2009-11-17 13:37:56

标签: hibernate web-applications jta

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

感谢。

2 个答案:

答案 0 :(得分: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并检查它以获取连接信息。

对于这种类型的东西,我通常只使用调试器,设置一个断点,然后围绕变量,直到找到信息的位置;然后看看它是否公开可用,如果没有,请使用反射来实现它。但是没有保证。

答案 1 :(得分:3)

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

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

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

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