gpt4 book ai didi

hibernate - 如何从实体管理器获取数据库元数据

转载 作者:行者123 更新时间:2023-12-03 22:23:52 25 4
gpt4 key购买 nike

我有一个使用休眠和JPA的应用程序。我需要找出它连接到哪个数据库,以便我基于数据库执行一些本地sql查询,例如。 oracle和postgres。如果我使用纯jdbc,则直接获取数据库元数据,但不知道如何从实体管理器中获取

谢谢

最佳答案

解决方法是,您可以获取EntityManagerFactory属性以获得基础数据库配置,该配置是特定于实现的。


休眠状态:hibernate.connection.driver_class
EclipseLink:eclipselink.target-database此属性指定目标数据库。在您的情况下,相应数据库的值可能为OraclePostgreSQL
常规:javax.persistence.jdbc.driver


从此信息中,您可以获取当前已连接的数据库。

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;




注意:您的应用程序设计不清楚,但是您的应用程序同时连接到两个数据库可能会发生。如果可能,您可以尝试为每个数据库使用单独的 EntityManager,指向 persistence.xml中的不同持久性单元,并可以相应地使用它。

如果不是这种情况,并且一次仅连接了其中一个,则只需通过 entityManager.isOpen()emf.isOpen()进行验证。

编辑:

Connection connection = entityManager.unwrap(Connection.class);  
DatabaseMetaData metaData = connection.getMetaData();


现在,您可以从中获取数据库产品名称,驱动程序等。

关于hibernate - 如何从实体管理器获取数据库元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10607196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com