2010-12-04 11 views
8

Estoy usando hibernate 3.x con Jboss. Actualmente admitimos múltiples bases de datos.Cómo saber el nombre de la base de datos subyacente del proveedor de hibernación

Ahora en tiempo de ejecución, ¿cómo puedo saber la información de la base de datos? al menos nombre o dialecto de base de datos? (por ejemplo, MySQL, Derby, Oracle, etc.)?

¿Alguien puede sugerir alguna forma de encontrar esta información? Pensé que la clase SessionFactory de hibernación proporcionaría dicha API, ¿pero no es así?

Gracias de antemano,

+0

Posible duplicado: http://stackoverflow.co m/questions/821466/how-can-i-get-the-database-name-i-am-connected-to-through-hibernate – javamonkey79

Respuesta

1

Puesto que usted tiene ya sea un hibernate.properties o un hibernate.cfg.xml, puedes leer Allways cualquier información de estos archivos.

8

Creo que se puede hacerlo de esta manera:

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

Tenga en cuenta que este método crea una conexión abandonada sin cerrarla. – DanielK

7

Muchas gracias javamonkey79 y COSTIS para responder a esta pregunta.

Sí, puedo leer el archivo hibernate.properties/cfg.xml pero quería evitar el flujo de trabajo de lectura de archivos.

Parece que Session::connection() api está en desuso ahora, pero todavía funciona. También podemos recuperar la misma información de otra manera que se detalla a continuación.

OPCIÓN 1

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

OPCIÓN 2

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

para MySQL, la URL de retorno será en forma de:

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

le da la Dialect y

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

le proporciona la url de conexión.

Nota: Esto sólo funciona con la clase SessionFactoryImpl, no con la interfaz

3

O puede probar:

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

Esperaba que esta fuera una forma de ver todas las propiedades de Hibernate, pero parece que solo funciona si la configuración se lee desde el archivo hibernate.cfg.xml. Estoy usando Spring para configurar Hibernate para que no funcione. ¿Alguna idea de cómo acceder al SessionFactoryImpl creado por Spring? –

+0

Descubrí que podría obtener SessionFactory de Spring como este '(SessionFactoryImpl) appContext.getBean (" sessionFactory ");' donde appContext es mi ApplicationContext. Usando esto puedo obtener muchas propiedades, pero extrañamente no la * hibernate.connection.url * mencionada en esta publicación. –

1

y se puede probar este código:

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

;)

Cuestiones relacionadas