2

jpaでHibernateを使用していて、persistence.xmlで構成されています。WebアプリケーションからHibernate接続プロパティを取得することは可能ですか?

ありがとう。

4

2 に答える 2

5

おそらく、リフレクションを使用せず、将来コードを壊さないようにHibernateに依存する必要があります。SessionFactoryからプロパティを取得する必要がありますが、パブリックではないため、リフレクションを介してフィールドを検索し、field.setAccessibleを使用してアクセスする必要があります。何かのようなもの:

Field f = SessionFactoryImpl.class.getDeclaredField("properties");
f.setAccessible(true);
Properties p = (Properties)f.get(sessionFactory);

次に、Environmentの定数を使用して、関連する設定を引き出します。実際のデータベース接続設定を探していて、アプリがjndiを使用している場合は、jndi名を使用してデータソースを取得し、それを調べて接続情報を取得することができます。

この種の場合、私は通常、デバッガーを使用し、ブレークポイントを設定してから、情報がどこにあるかがわかるまで変数を調べます。次に、公開されているかどうかを確認し、公開されていない場合は、リフレクションを使用して公開します。ただし、保証はありません。

于 2009-11-17T14:19:09.703 に答える
3

JDBCを使用している場合は、いつでも接続とそのメタデータを取得できます。Springトランザクションマネージャーを使用している場合は、次のように取得できます。

transactionManager.getDataSource().getConnection().getMetaData()

これは、ユーザー名を含むデータベースとその接続に関する大量の情報を表示します。データベース接続プールを処理する可能性のあるいくつかの情報がpersistence.xmlにあります。これは通常、Hibernateのどこにも保存されませんが、実際の接続プールコードに保存されます。

persistence.xmlファイルからどのような情報を取得する必要がありますか?

于 2009-11-17T14:18:09.190 に答える