(EclipseLink実装で)JPAを使い始めたところです。私は非常に単純な選択クエリを持っています
(1)entityManager.find(SomeEntity.class、SomeEntityPK); (2)entityManager.createQuery( "Select x from SomeEntity x where x.isDefault = true")。getResultList();
SomeEntityテーブルのレコード数は約50(非常に小さいテーブル)です。
クエリ(1)は最初は3秒かかりますが、その後のヒットは200ミリ秒かかります。明らかに、キャッシュが機能しています。ただし、クエリ(2)はすべての呼び出しに2秒かかります-なぜキャッシュが使用されないのか疑問に思います。クエリ(IDまたはインデックスを使用しないもの)は常にDBにヒットし、エンティティの関係はキャッシュから利用されることを理解しています。
パフォーマンスを向上させる方法はありますか?単純なJDBC選択では、クエリ(2)のデータをフェッチするのに300ミリ秒未満かかります。
[更新]問題は解決したと思います。テーブル「SomeEntity」の列の1つは、OracleXMLTypeでした。いくつかの問題のため、このフィールドを削除し、代わりにCLOBフィールドを使用してxmlデータを格納する必要がありました。そして出来上がり、JPAは突然クエリ結果のキャッシュを開始しました。JPAがXMLTypeをキャッシュしない理由はわかりませんが。