【发布时间】:2009-08-19 19:00:53
【问题描述】:
在他出色的博文“Hibernate query cache considered harmful?”中,Alex Miller(来自 Terracotta Inc.)解释了为什么使用查询缓存会损害延迟和可扩展性。
我的问题是:是否可以为使用二级缓存而没有查询缓存的特定域对象类型编写“获取所有”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 将使用普通的“从表”查询为您处理它。如果是后者,您可以访问缓存本身并对其进行迭代。
-
后者(抱歉,如果问题标题中不清楚)。我将如何“获取缓存本身并对其进行迭代”?
标签: hibernate