В своем превосходном сообщении в блоге «Hibernate query cache considered harmful?» Алекс Миллер (Terracotta Inc.) объясняет, почему использование кеша запросов может быть вредным для латентности и масштабируемости.Извлечь все Foo из кэша второго уровня Hibernate без кэша запросов?
Мой вопрос: возможно ли написать метод «получить все» DAO для определенного типа объекта домена, который использует кеш второго уровня без кэша запросов?
Моя обычная форма коды для такого способа включает кэш запросов, например:
public List<Foo> getAllFoo()
{
return (List<Foo>) getHibernateTemplate().execute(new HibernateCallback()
{
public Object doInHibernate(Session session)
{
Query q = session.createQuery("from Foo");
// Cache the results in the query cache.
q.setCacheable(true);
return q.list();
}
});
}
Моей единственной расплывчатую мысль поддержание кэшированной совокупности всех Foo на каком-либо объекте синглтона домена (который также кэшируется) , Есть ли более элегантный способ?
ли вы имеете в виду получить все из базы данных или все, что в настоящее время в кеше? Если это первый, Hibernate будет обрабатывать его для вас с обычным запросом «из таблицы». Если это последний, вы можете добраться до самого кеша и просто перебрать его. –
Последний (извините, если это непонятно в заголовке вопроса). Как я могу «добраться до самого кеша и просто перебирать его»? –