Como solución alternativa, se puede recuperar los EntityManagerFactory
propiedades para obtener la configuración de la base de datos subyacente , que es específico de la implementación.
Hibernate: hibernate.connection.driver_class
EclipseLink:eclipselink.target-database
Esta propiedad especifica la base de datos de destino. En su caso, puede tener un valor como Oracle
o PostgreSQL
para la base de datos respectiva.
general:javax.persistence.jdbc.driver
partir de esta información, se puede obtener la base de datos conectada actualmente.
EntityManagerFactory emf = entityManager.getEntityManagerFactory();
Map<String, Object> emfProperties = emf.getProperties();
String driverClass = (String)emfProperties.get(PROPERTY);
//-- For PostgreSQL, it will have value "org.postgresql.Driver"
if(driverClass.lastIndexOf("postgresql") != -1)
postGreSQL_DB = true;
Nota:No mucho claro en su diseño de la aplicación, pero puede suceder que su aplicación se conecta a las bases de datos. Si es posible, puede intentar tener EntityManager
por separado para cada base de datos, apuntar a diferentes unidades de persistencia en persistence.xml
& puede usarlo en consecuencia.
Si este no es el caso & sólo uno de ellos está conectado a la vez, entonces puede simplemente verificar que por entityManager.isOpen()
o emf.isOpen()
.
Editar:
Connection connection = entityManager.unwrap(Connection.class);
DatabaseMetaData metaData = connection.getMetaData();
ahora de esto, se puede obtener el nombre del producto de base de datos, etc. conductor
Gracias Nayan por estos útiles consejos. Cuando trato de obtener fem de em, no los veo, así que se me ocurrió este código DatabaseMetaData dbmd = ((Session) entityManager.getDelegate()). Connection(). GetMetaData(); dbName = dbmd.getDatabaseProductName(); – user509755
No sé si este código es portátil para el servidor de diferencias y la forma correcta de hacerlo, ya que hibernate va a eliminar el método connection() de la versión 4.x. Pero por ahora esto funcionará para mí. – user509755
@ user509755 Me alegro de que lo haya encontrado útil. Lo intenté con el administrador de la entidad como lo mencionaste en cuestión. Además, qué sucedió cuando probaste con el administrador de la entidad. Puede publicarlo como respuesta, podría ayudar a alguien. –