2011-06-20 10 views
1

どのようにクエリを実行中に傍受するのですか?基本的には、EntityMangerを介して実行されるすべてのクエリを傍受し、分析のためにアプリケーションサーバのログファイルに「NATIVE」SQLを記録する必要がありますか?前後にイントロスペクトする方法があるので教えてください。実行するために必要なクエリと時間をログに記録できますか?JPAまたはクエリの代行受信

はJPAエンジンは非常にかかわらず、JPAの実装のサーバーサイドでクエリをイントロスペクションする一般的な方法は何か休止状態またはOpen JPAすることができることを覚えておいてください?事前に

すべてのヘルプは大歓迎です。..

おかげで、

Bhavesh

+0

一般的な方法はありません。まともなJPA実装では、問合せ、生成されたSQL、および実行に要した時間をログに記録できなければなりません。 DataNucleusは確かにそうです – DataNucleus

答えて

0

私は事実を除いJPA仕様でのデバッグ/ログについて何を参照してくださいいけないという外部プロパティその実装useは独自の名前空間を使用する必要があります(例えばcom.hibernate.logの場合)。

JPAプロバイダは、persistence.xmlで言及される必要があり、あなたが同じファイル内に実装固有のプロパティ(それは休止状態のためにどのように機能するか、少なくともザッツ)を置くことができないので?

1

あなたは休止状態インターセプターを使用することができます休止状態を使用している場合は、これは解雇すべてのクエリをインターセプトします。あなたもすべて一緒にクエリを停止&を喜ばせるよう

Session s = sessionFactory.openSession(new MyInterceptor());

このセッションオブジェクトから発射任意のクエリが傍受されるこの方法は、クエリを調整することができます。

代わりに、あなたは(のlog4jを使用して)特定のファイルのすべてのクエリをログに記録できます。 これは、hibernate cfgファイルでshow_sqlをtrueに設定する必要があります。

0

すべての良いDBMSは(長すぎる)クエリロギング機能を提供する必要があります。

しかし、あなたは、Javaで滞在したい場合JDBC LoggerLog4JDBCを使用してみてください。 完全なクエリのロギングはアプリケーションのパフォーマンスに影響を与える可能性があるので、実際にはそれを慎重に行ってください。

関連する問題