我们,我们需要一个Hibernate会话,我知道加载的所有实体的唯一途径过程中加载实体的整个表的所有实体是通过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进行二级缓存。
问题在于,这被称为100次在给定的交易会话中占用了相当一部分总时间。有什么办法可以加载给定类型的所有实体(加载整个表),并且还能从第一级会话缓存或第二级ehcache中受益。
我们被告知要远离查询缓存,因为它们的潜在性能损失与其收益相关。 * Hibernate Query Cache considered harmful
尽管我们现在正在执行性能分析,所以可能是时候尝试启用查询缓存。
为什么您的代码首先在同一个事务中重新加载整个表100次?如果是因为其他线程可能正在插入,那么即使您以某种不可思议的方式重写代码以使用它们,L1和L2缓存也不能做太多的事情来帮助您。 – Affe 2010-08-31 23:31:49
它是一个静态表(每24小时至少静态),更多的是,在给定的transacation中该方法被称为100次,我们可以轻松地在该DAO中“缓存”该事务的方法,但我很好奇,如果我正在重新创建已经完成的缓存,如果我以不同的方式加载表。 – Dougnukem 2010-09-01 18:04:06