亞歷克斯米勒(Terracotta Inc.)在他出色的博客文章「Hibernate query cache considered harmful?」中解釋了爲什麼使用查詢緩存會對延遲和可伸縮性造成負面影響。從Hibernate二級緩存中檢索所有Foo而沒有查詢緩存?
我的問題是:是否有可能爲不使用查詢緩存而使用二級緩存的特定域對象類型編寫'get all'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會用普通的「從表」查詢爲你處理。如果是後者,你可以到達緩存本身,只是遍歷它。 – 2009-08-20 03:11:42
後者(抱歉,如果在問題標題中不明確)。我將如何「到達緩存本身並只是遍歷它」? – 2009-08-20 07:55:11