JPA (EclipseLink) の背後にあるデータベースでクエリ ロギングをオンにしたところ、JPA の「最適化」と「キャッシング」の恐ろしさを目の当たりにしました。
たとえば、次のような単純な JPA クエリを実行します。
SELECT p FROM Picklist p;
... JPA はデータベースに対して何百万もの SQL クエリを実行します (レコードごとに 1 つのクエリなので、id=[...] のピックリストから * を選択します)。Picklist は単純なエンティティです。
SELECT * FROM Picklist を実行せず、他のすべて (永続コンテキストの入力など) をメモリ内で実行するのはなぜですか?
これを行うように指示するには、特別なスイッチが必要ですか? なぜこのように機能するのですか?