2017-11-08 11 views
0

私のアプリケーションでは、私はどのデータベースドライバを使用するのか知っているはずです。 これは、別のケースになる場合があります。 (H2またはPostgres)既存のEntityManagerからデータベースドライバを入手するにはどうすればよいですか?

H2かどうかを確認する方法はありますか? H2には同じテーブルがないためです。

歓声 K.Hunn

+0

ポストグル '情報_schema'またはそのようなものをクエリするつもりですか? – Kayaman

+0

これはあなたの 'JPA'実装に依存するかもしれません。どちらですか? – pirho

答えて

0

ことが可能ですが、私はそれが何の問題への解決策であればかなりわかりません。

conn.getMetaData().getDriverName(); 

または

conn.getMetaData().getDriverVersion(); 

:しかしあなたが好きjava.sql.Connectionからドライバ名を取得することができます

ここでトリッキーな部分は、それはJPAプロバイダ固有のものであるため、接続を取得する方法です。ここでは、OpenJPAので行く方法です:

まず、開封された(=実装固有)エンティティマネージャを必要とする:

OpenJPAEntityManager unWrappedEm = OpenJPAPersistence.cast(em); 

だから、あなたはそれが何であるかを知っている必要があります。

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

javadocからEntityManager方法<T> T unwrap(java.lang.Class<T> cls)

戻り、指定した型のオブジェクトが プロバイダ固有のへのアクセスを許可するために:その後、あなたは(まだOpenJPAの中に)このような接続を取得することができますAPI。プロバイダのEntityManager実装 が指定されたクラスをサポートしていない場合、PersistenceExceptionは です。

関連する問題