質問

私は、新しいアプリケーションのためのJDBCの上にJPAを使用したいと思います。私は厳密にデータベース上で実行されるすべてのSQLのネイティブクエリを抽出するために、名前付きクエリと(休止状態のヘルプ、またはその他のJPA実装で)私を可能にJPAエンティティマネージャの基本的なCRUDメソッドを使用しています。静的クエリのこのリストでは、私は私が私の要求のすべての実行計画であるDB2パッケージを構築することができることを理解します。

だから私の質問は次のとおりです。これらの実行計画を活用するか、しませんDB2に対するJDBCを通じてこれらのクエリを実行していますか?私はpureQueryの製品は、SQL注文のリストをキャプチャすることができることを理解しています。それは、まだJDBC経由していないpureQueryの特定のAPIを介して、より多くを提供していますか?そのような特定のDB2静的バインド機能?またはそれは、JDBCと同等です?

答えのいずれかの作品をありがとうございました。

役に立ちましたか?

解決

JDBCアプリケーションは、動的SQLの実行のみ(すなわち、DB2は、静的なパッケージを使用していません)。

(クエリーは、データベース内のパッケージに格納されている)、静的SQLを取得する唯一の2通りの方法があります。(JPA / Hibernateのを排除)SQLJを使用してアプリケーションを書くか(JDBCとデータベースの間に座っている)のpureQueryを使用するにはます。

(つまり、彼らがキャッシュに残っている)彼らは十分な頻度で実行されているかのようであっても、動的SQLで、DB2は、クエリの実行プランをキャッシュしないことに注意してください、あなたは、クエリのコンパイルからのオーバーヘッドは表示されません。クエリはバイト単位での正確な一致している場合は、キャッシュにのみ有効ですので、select * from t1 where c1 = 1select * from t1 where c1 = 2と同じではなく、またselect * from t1 where C1 = 1である(同じ結果が得られますが、クエリは異なります)。パラメーター・マーカー(select * from t1 where c1 = ?)を使用してキーです。あなたのDBAのチューニングカタログ・キャッシュのサイズがこのキャッシュのヒット率を最大限にすることができます。

キャッシュは、クエリのコンパイル繰り返し避けることができますが、それはYMMVので、静的SQLが行うことを計画の安定性を、提供していません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top