Ich versuche, eine Abfrage wie diese zu cachen:
TypedQuery<Foo> q = em.createQuery(
"SELECT foo FROM Foo foo " +
"INNER JOIN FETCH Foo.bar "
);
q.setHint("org.hibernate.cacheable", true);
Das Problem ist, dass die FETCH
scheint keine Wirkung zu haben, wenn der Cache getroffen wird, d.h. die Sammlung Foo.bar wird nicht initialisiert. Ich könnte über die Ergebnisliste iterieren und alle Instanzen der Sammlung von Hand initialisieren, aber das würde das Ganze noch langsamer machen, als wenn ich den Abfrage-Cache nicht von vornherein verwenden würde.
Ich verwende JBoss AS 6.0 / Hibernate 3.6 mit Infinispan als Cache-Engine.
Seltsamerweise scheinen laut den Cache-Statistiken, die ich über die JMX-Konsole erhalte, Objekte in Foo.bar zwischengespeichert zu werden, aber der Cache für diese Objekte erhält keine Treffer.