Как узнать имя базы данных от провайдера спящего режима - PullRequest
12 голосов
/ 04 декабря 2010

Я использую Hibernate 3.x с Jboss.В настоящее время мы поддерживаем несколько баз данных.

Теперь, во время выполнения, как я могу узнать информацию о базовой базе данных?хотя бы название или база-диалект?(например, MySQL, Derby, Oracle и т. д.)?

Может кто-нибудь предложить какой-либо способ найти эту информацию?Я думал, что Hibernate SessionFactory класс будет предоставлять такие API - но это не так?

Заранее спасибо,

Ответы [ 7 ]

9 голосов
/ 04 декабря 2010

Я думаю, вы можете сделать это следующим образом:

sessionFactory.getCurrentSession().connection().getMetaData().getURL()
8 голосов
/ 05 декабря 2010

Большое спасибо javamonkey79 и costis за ответ на этот вопрос.

Да - я могу прочитать файл hibernate.properties/cfg.xml - но я хотел избежать процесса чтения файла.

Похоже, что Session::connection() api устарела, но все еще работает.Мы также можем получить ту же информацию другим способом, как указано ниже.

OPTION 1

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

OPTION 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
4 голосов
/ 25 октября 2011
sessionFactory.getDialect();

дает вам Dialect и

sessionFactory.getSettings().getConnectionProvider().getConnection().getMetaData().getURL();

предоставляет вам URL соединения.

Примечание : работает только с классом SessionFactoryImpl, а не с интерфейсом

3 голосов
/ 20 января 2012

Или вы можете попробовать:

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
SessionFactoryImpl sessionFactoryImpl = (SessionFactoryImpl) sessionFactory;
Properties props = sessionFactoryImpl.getProperties();
String url = props.get("hibernate.connection.url").toString();
String[] urlArray = url.split(":");
String db_name = urlArray[urlArray.length - 1];
1 голос
/ 08 августа 2018

Для Hibernate 5.2.0, чтобы получить источник данных ..

SessionFactoryImplementor entityManagerFactory = (SessionFactoryImplementor) sessionFactory.openSession().getEntityManagerFactory();
DatasourceConnectionProviderImpl connectionProvider = (DatasourceConnectionProviderImpl) entityManagerFactory.getServiceRegistry().getService(ConnectionProvider.class);
BasicDataSource dataSource = (BasicDataSource) connectionProvider.getDataSource();
dataSource.getUrl();
1 голос
/ 08 ноября 2013

и вы можете попробовать этот код:

String url = null;
try {
    url = getSession().connection().getMetaData().getURL().toString();
} catch (HibernateException e) {
    e.printStackTrace();
} catch (SQLException e) {
    e.printStackTrace();
}
String[] urlArray = url.split(":");
String db_name = urlArray[1];

;)

1 голос
/ 04 декабря 2010

Поскольку у вас есть либо hibernate.properties, либо hibernate.cfg.xml, вы всегда можете прочитать любую информацию из этих файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...