У нас есть целая таблица сущностей, которые нам нужно загрузить во время сеанса гибернации, и единственный известный мне способ загрузить все сущности — через запрос HQL:
public <T> List<T> getAllEntities(final Class<T> entityClass) {
if (null == entityClass)
throw new IllegalArgumentException("entityClass can't be null");
List<T> list = castResultList(createQuery(
"select e from " + entityClass.getSimpleName() + " e ").list());
return list;
}
Мы используем EHcache для кэширования 2-го уровня.
Проблема в том, что это вызывается 100 раз в данном сеансе транзакции и занимает значительную часть общего времени. Есть ли способ загрузить все объекты данного типа (загрузить всю таблицу) и при этом получить выгоду от кэша сеанса 1-го уровня или ehcache 2-го уровня.
Нам сказали держаться подальше от кэширования запросов из-за их потенциального снижения производительности по сравнению с их преимуществами. * кэш запросов Hibernate считается опасным
Хотя сейчас мы занимаемся профилированием производительности, возможно, пора попробовать включить кеширование запросов.