如何从现有的EntityManager获取数据库驱动程序?

时间:2017-11-08 12:36:57

标签: java jpa entitymanager

在我的应用程序中,我应该知道,我使用的是哪个数据库驱动程序。 这可能是另一种情况。 (H2或Postgres)

有没有办法检查它是否是H2?因为H2没有相同的表格。

欢呼声 K.Hunn

1 个答案:

答案 0 :(得分:0)

这是可能的,但我不太确定它是否可以解决任何问题。

您可以从java.sql.Connection获取驱动程序名称,如:

conn.getMetaData().getDriverName();

conn.getMetaData().getDriverVersion();

但是:这里棘手的部分是如何获得连接,因为它是JPA提供商特定的东西。以下是OpenJPA的用法:

首先,您需要解包(=特定于实现)实体管理器:

OpenJPAEntityManager unWrappedEm = OpenJPAPersistence.cast(em);

所以你必须知道它是什么。之后,您可以获得这样的连接(仍在OpenJPA中):

Connection conn = (Connection)unWrappedEm.getConnection();

来自javadoc方法EntityManager

<T> T unwrap(java.lang.Class<T> cls)
  

返回指定类型的对象以允许访问   特定于提供者的API。如果提供者的EntityManager实现   不支持指定的类,PersistenceException是   抛出。