Поддержка кэша второго уровня для кэширования результата запроса исключает - PullRequest
1 голос
/ 23 декабря 2010

Обычный способ запроса:

Session sess=factory.getCurrentSession();
sess.beginTran....();

String hql="from Entity en where en......";
Query q=sess.createQuery(hql).setCacheble(true);
List<Entity> list=q.list();

В этом случае объект в списке - это «сущности».Они будут кэшированы.

Однако мне интересно, будет ли работать кеш, если hql будет выглядеть следующим образом:

hql="select new Result(count(xx),sum(xxx)) from Entity en ....";

class Result{
  long num;
  long sum;
  //constructor,getter and setter
}

Теперь тип объектов в списке результатов будет Результат .

List<Result> list=q.list();

Мой вопрос: можно ли сохранить объект результата в кэше второго уровня?

Также как насчет ResultTransformer ?

q.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);

В этом случае тип объектов в q.list () будет Map , эти карты также можно кэшировать?

1 Ответ

0 голосов
/ 23 декабря 2010

Это, безусловно, работает для "нового результата (...)", но я не уверен на 100% в ResultTransformer.Я не вижу причины, почему это не так, учитывая, что преобразование выполняется после запроса.

...