如何从休眠提供程序知道基础数据库名称备选案文1备选案文2

2022-09-04 06:55:40

我正在使用休眠3.x与Jboss。目前,我们支持多个数据库。

现在在运行时,我如何知道底层数据库信息?至少是名称或数据库方言?(例如MySQL,Derby,Oracle等)?

任何人都可以建议任何方法来查找此信息吗?我以为休眠SessionFactory类会提供这样的api - 但事实并非如此?

提前致谢,


答案 1

我认为你可以这样做:

sessionFactory.getCurrentSession().connection().getMetaData().getURL()

答案 2

非常感谢javamonkey79和costis回答这个问题。

是的 - 我可以读取hibernate.properties/cfg.xml文件 - 但我想避免文件读取工作流。

似乎 api 现在已被弃用,但它仍然有效。我们还可以通过下面列出的另一种方式检索相同的信息。Session::connection()

备选案文1

Session session = sessionFactory.openSession();
String dbURL = session.connection().getMetaData().getURL().toString();
session.close();

备选案文2

Settings settings = ((SessionFactoryImpl) sessionFactory).getSettings();
if (settings != null) {
    Connection connection = settings.getConnectionProvider().getConnection();
    String dbURL  = connection.getMetaData().getURL();
    connection.close();
}

对于MySql,返回URL将采用以下形式:

jdbc:mysql://localhost:3306/edm?useUnicode=true

推荐