12
votes

Comment savoir le nom de base de données sous-jacent du fournisseur hibernate

J'utilise Hibernate 3.x avec JBoss. Actuellement, nous prenons en charge plusieurs bases de données.

Maintenant en exécution, comment puis-je connaître les informations de base de données sous-jacentes? Au moins le nom ou la base de données-dialecte? (E.G. mysql, derby, oracle, etc.)?

Quelqu'un peut-il suggérer un moyen de trouver ces informations? Je pensais que Hibernate SesseFactory Class fournira une telle API - mais ce n'est pas?

Merci d'avance,


1 commentaires

10 Réponses :


1
votes

Depuis que vous avez soit une hibernate.properties ou un hibernate.cfg.xml, vous pouvez également lire toutes les informations sur ces fichiers.


0 commentaires

9
votes

Je pense que vous pouvez le faire de cette façon:

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


1 commentaires

Sachez que cette méthode crée une connexion abandonnée sans la clôture.



8
votes

Merci beaucoup Javamonkey79 et Costis pour répondre à cette question.

Oui - Je peux lire le fichier hibernate.properties/cfg.xml - mais je voulais éviter le flux de travail de lecture de fichier.

Il semble que session :: Connection () API est désigné maintenant, mais cela fonctionne toujours. Nous pouvons également récupérer les mêmes informations d'une autre manière comme indiqué ci-dessous.

Option 1 xxx

option 2 xxx

pour MySQL, l'URL de retour sera sous la forme de: xxx


0 commentaires

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

0 commentaires

3
votes

ou vous pouvez essayer: xxx


2 commentaires

J'espérais que ce serait une façon de regarder toutes les propriétés hibernate, mais il semble que cela ne fonctionne que si la configuration est en cours de lecture à partir du fichier hibernate.cfg.xml. J'utilise le ressort pour configurer Hibernate afin que cela ne fonctionne pas. Une idée de l'accès à la sessionFactoryImpl créé au printemps?


J'ai compris que je pouvais obtenir la sessionFactory du printemps comme celui-ci (sessionFactoryImpl) appContext.getbean ("SéanceFactory"); où AppContext est mon applicationContext. En utilisant cela, je peux obtenir beaucoup de propriétés, mais curieusement pas le hibernate.connection.url mentionné dans ce post.



1
votes

Et vous pouvez essayer ce code:

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];


0 commentaires

1
votes

pour Hibernate 5.2.0, pour obtenir le DataSource ..

SessionFactoryImplementor entityManagerFactory = (SessionFactoryImplementor) sessionFactory.openSession().getEntityManagerFactory();
DatasourceConnectionProviderImpl connectionProvider = (DatasourceConnectionProviderImpl) entityManagerFactory.getServiceRegistry().getService(ConnectionProvider.class);
BasicDataSource dataSource = (BasicDataSource) connectionProvider.getDataSource();
dataSource.getUrl();


0 commentaires

3
votes

Le moyen le plus simple consiste à obtenir les propriétés actuellement configurées, puis à obtenir votre URL de DB à l'aide de la touche "hibernate.connection.url". Le code suivant imprime l'URL de la session de courant xxx

sur mon système, je reçois xxx


0 commentaires

0
votes

Vous pouvez l'inspecter dans une vue variable dans Intellij comme ci-dessous

 capture d'écran


0 commentaires

0
votes

Cela a fonctionné pour moi: xxx


1 commentaires

Veuillez expliquer vos lignes de code afin que d'autres utilisateurs puissent comprendre sa fonctionnalité. Merci!