Я пытаюсь кэшировать такой запрос:
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, кажется, кэшируются, но кеш для этих объектов не получает никаких попаданий.