次のようなクエリをキャッシュしようとしています:
TypedQuery<Foo> q = em.createQuery(
"SELECT foo FROM Foo foo " +
"INNER JOIN FETCH Foo.bar "
);
q.setHint("org.hibernate.cacheable", true);
問題はFETCH
、キャッシュがヒットしたときに効果がないように見えることです。つまり、コレクション Foo.bar が初期化されません。結果リストを繰り返し処理し、コレクションのすべてのインスタンスを手動で初期化することもできますが、最初からクエリ キャッシュを使用しない場合よりも全体がさらに遅くなります。
JBoss AS 6.0 / Hibernate 3.6 と Infinispan をキャッシュ エンジンとして使用しています。
不思議なことに、JMX コンソールから取得したキャッシュ統計によると、Foo.bar 内のオブジェクトはキャッシュされているように見えますが、それらのオブジェクトのキャッシュにはヒットがありません。