2010-12-04 9 views
8

Jbossでhibernate 3.xを使用しています。 現在、複数のデータベースをサポートしています。休止状態のプロバイダから基礎となるデータベース名を知る方法

実行時に、基礎となるデータベース情報をどのように知ることができますか?少なくとも名前やデータベースの方言? (MySQL、Derby、Oracleなど)?

この情報を見つける方法はありますか? 私は、Hibernate SessionFactoryクラスがそのようなAPIを提供すると思っていましたが、そうではありませんか?事前に

おかげで、

+0

可能な複製:http://stackoverflow.co m/questions/821466 /データベース名-i-am-connected-through-through-hibernate – javamonkey79

答えて

1

あなたはhibernate.propertiesまたはhibernate.cfg.xmlのいずれかを持っているので、あなたはオールウェイズこれらのファイルオフ任意の情報を読み取ることができます。

8

私はあなたがそれをこの方法で行うことができると思います。この質問に応答する

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

このメソッドは、閉じずに放棄された接続を作成することに注意してください。 – DanielK

7

どうもありがとうございましたjavamonkey79とcostisを。

はい - 私はhibernate.properties/cfg.xmlファイルを読むことができますが、私はファイルの読み込みワークフローを避けたかったのです。

Session::connection() apiは廃止されましたが、それでも機能します。 また、同じ情報を下記の別の方法で取得することもできます。 MySQLの

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(); 
} 

、リターンURLは次の形式になります。

jdbc:mysql://localhost:3306/edm?useUnicode=true 
3
sessionFactory.getDialect(); 

あなたDialect

を与えます
sessionFactory.getSettings().getConnectionProvider().getConnection().getMetaData().getURL(); 

は接続URLを提供します。

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

:あなたはこのコードを試すことができます

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

それとも、試すことができて、SessionFactoryImplクラスで動作します;)

+0

これはHibernateのすべてのプロパティを見ることができるようになることを期待していましたが、configがhibernate.cfg.xmlファイルから読み込まれている場合にのみ動作するようです。私はHibernateを設定するためにSpringを使用していますので、動作しません。 Springによって作成されたSessionFactoryImplへのアクセス方法 –

+0

私は、この '(SessionFactoryImpl)appContext.getBean(" sessionFactory ");'のようにSpringからSessionFactoryを取得できることを知りました。ここで、appContextは私のApplicationContextです。これを使用して、私はたくさんのプロパティを得ることができますが、このポストで言及されている* hibernate.connection.url *ではありません。 –

1

と:これはないインタフェース