私は JPA を初めて使用し、Web サービス用に単純な JPA 選択を作成しました。以前は従来の SQL ステートメントを使用していました。それは素晴らしかったです。確実な速度を得る方法を知っていましたが、現在、5 つの異なるプロジェクトで 3 つの異なるデータベースを使用しています。そのため、3 つの SQL 言語を知らなくても、JPA を学ぶことは 1 つのテクノロジを使用するのに適していると考えました。そこで、いくつかのテーブル、エンティティを作成し、JPA を使用しようとしました。しかし、最初の瞬間に何かが間違っていました-スピード。
(MSSQL 2008 を使用しています)
単純なネイティブ SQL select と JPA select を比較しました。
em.createNativeQuery("SELECT c.* FROM Table c", MyTable.class);
と
em.createQuery("SELECT c FROM Table c", MyTable.class)
createNativeQuery
は 5 倍高速でしたが、なぜですか?
そこで、MSSQL パッケージに含まれている SQL プロファイラーを起動し、JPA が行っていることをデバッグしました。私は 100 レコードのテーブルを持っていますが、私が見たものには驚きました:
createNativeQuery
データベースへの1つのリクエストを作成し、結果はクエリで100レコードでしたcreateQuery
100 のリクエストを作成し、すべてのリクエストが 1 つのレコードを返します。このようなもの:1 SELECT Col1, Col2 FROM TABLE WHERE (ID = ?)<br> 2 SELECT Col1, Col2 FROM TABLE WHERE (ID = ?)<br> . . . 100 SELECT Col1, Col2 FROM TABLE WHERE (ID = ?)
私はEclipse LinkでJPA 2を使用しています。これは、JPA がどのように機能するかについての通常の動作ですか? または、設定で何か間違ったことをしましたか。