Jako obejście można pobrać właściwości EntityManagerFactory
aby uzyskać konfigurację bazy danych podstawowych , który jest specyficzny dla implementacji.
Hibernate: hibernate.connection.driver_class
EclipseLink:eclipselink.target-database
Ta właściwość określa docelowej bazy danych. W twoim przypadku może mieć wartość jako Oracle
lub PostgreSQL
dla odpowiedniej bazy danych.
ogólne:javax.persistence.jdbc.driver
Na podstawie tych informacji można uzyskać w bazie aktualnie podłączony.
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;
Uwaga:Niewiele jasne projektowania aplikacji, ale może się zdarzyć, że aplikacja jest podłączony do obu baz danych. Jeśli to możliwe, możesz spróbować oddzielić EntityManager
dla każdej bazy danych, wskazując na różne jednostki trwałości w jednostce persistence.xml
&.
Jeśli to nie jest przypadek & tylko jeden z nich jest podłączony w czasie, to może po prostu go zweryfikować przez entityManager.isOpen()
lub emf.isOpen()
.
Edit:
Connection connection = entityManager.unwrap(Connection.class);
DatabaseMetaData metaData = connection.getMetaData();
Teraz od tego, można uzyskać nazwę produktu bazy danych, kierowca itd
Dziękuję Nayan za pomocne wskazówki. Kiedy próbuję uzyskać emf z em, nie widzę ich, więc wymyśliłem ten kod DatabaseMetaData dbmd = ((Session) entityManager.getDelegate()). Connection(). GetMetaData(); dbName = dbmd.getDatabaseProductName(); – user509755
Nie wiem, ten kod jest przenośny dla serwera diff i prawidłowy sposób robienia tego, ponieważ hibernacja usunie metodę connection() z wersji 4.x. Ale na razie to zadziała dla mnie. – user509755
@ user509755 Cieszę się, że okazało się pomocne. Próbowałem go z menedżerem encji, o czym wspomniałeś. Co się stało, gdy próbowałeś z menedżerem encji. Możesz opublikować to jako odpowiedź, może komuś pomóc. –