私のアプリケーションでは、私はどのデータベースドライバを使用するのか知っているはずです。 これは、別のケースになる場合があります。 (H2またはPostgres)既存のEntityManagerからデータベースドライバを入手するにはどうすればよいですか?
H2かどうかを確認する方法はありますか? H2には同じテーブルがないためです。
歓声 K.Hunn
私のアプリケーションでは、私はどのデータベースドライバを使用するのか知っているはずです。 これは、別のケースになる場合があります。 (H2またはPostgres)既存のEntityManagerからデータベースドライバを入手するにはどうすればよいですか?
H2かどうかを確認する方法はありますか? H2には同じテーブルがないためです。
歓声 K.Hunn
ことが可能ですが、私はそれが何の問題への解決策であればかなりわかりません。
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は です。
ポストグル '情報_schema'またはそのようなものをクエリするつもりですか? – Kayaman
これはあなたの 'JPA'実装に依存するかもしれません。どちらですか? – pirho