J'utilise Hibernate 3.x avec JBoss. Actuellement, nous prenons en charge plusieurs bases de données. P>
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.)? P>
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? P>
Merci d'avance, P>
10 Réponses :
Depuis que vous avez soit une hibernate.properties ou un hibernate.cfg.xml, vous pouvez également lire toutes les informations sur ces fichiers. P>
Je pense que vous pouvez le faire de cette façon:
sessionFactory.getCurrentSession().connection().getMetaData().getURL()
Sachez que cette méthode crée une connexion abandonnée sans la clôture.
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. P>
Il semble que pour MySQL, l'URL de retour sera sous la forme de: p> session :: Connection () code> 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. P> Option 1 h1>
option 2 h1>
sessionFactory.getSettings().getConnectionProvider().getConnection().getMetaData().getURL();
ou vous pouvez essayer:
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"); Code> où AppContext est mon applicationContext. En utilisant cela, je peux obtenir beaucoup de propriétés, mais curieusement pas le hibernate.connection.url i> mentionné dans ce post.
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];
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();
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 sur mon système, je reçois p>
Cela a fonctionné pour moi:
Veuillez expliquer vos lignes de code afin que d'autres utilisateurs puissent comprendre sa fonctionnalité. Merci!
Duplicaté possible: Stackoverflow.com/Questtions/821466/...