3 Stimmen

Hibernate EntityManager + Query Cache - "join fetch" funktioniert nicht

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.

2voto

axtavt Punkte 233070

Sie kann behoben werden durch Anwendung von @Cache zur Sammlungseigenschaft (natürlich sollte auch die Zielentität cachefähig sein), siehe 21.2.1. Cache-Zuordnungen .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X