Hibernate EntityManager + Query Cache - «выборка соединения» не работает - PullRequest
3 голосов
/ 28 апреля 2011

Я пытаюсь кэшировать запрос следующим образом:

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

1 Ответ

2 голосов
/ 28 апреля 2011

Это можно исправить, применив @Cache к свойству коллекции (конечно, целевая сущность также должна быть кэшируемой), см. 21.2.1. Отображения кэша .

...