日期:2014-05-20  浏览次数:20800 次

hibernate大数据量查询问题
大家好,我从银行里取数据,四万条就很慢了,几十万根本不行,抛出out of memory异常,我用hibernate来做分页,hibernate好像是一次性从数据库取出全部的数据,不是按每页的页数来取的。我的手提才1G内存,我的hibernate分页是这样子的。 

public List findAll(Integer currentPage, Integer pageSize, String sql) { 
final int startRow = (currentPage - 1) * pageSize; 
final int pageSize1 = pageSize; 
final String newsql = sql; 

return this.getHibernateTemplate().executeFind(new HibernateCallback() { 
public List doInHibernate(Session session) 
throws HibernateException
Query query = session.createQuery(newsql); 
query.setFirstResult(startRow); 
query.setMaxResults(pageSize1); 
return query.list(); 

}); 

我用spring 来管理 hibernate,hibernate的属性设置是这样的 

<bean id="sessionFactory" 
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
<property name="dataSource"> 
<ref bean="dataSource" /> 
</property> 
<property name="hibernateProperties"> 
<props> 
<prop key="hibernate.dialect">org.hibernate.dialect.DB2Dialect </prop> 

<prop key="hibernate.show_sql">true </prop> 
<prop key="hibernate.jdbc.batch_size">50 </prop> 
<prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider </prop> 
<prop key="hibernate.cache.use_second_level_cache">false </prop> 
<prop key="hibernate.cache.use_query_cache">false </prop> 
<prop key="hibernate.cache.use_minimal_puts">false </prop> 
</props> 
</property>

------解决方案--------------------
Please paste the method using "findAll(Integer currentPage, Integer pageSize, String sql)"
------解决方案--------------------
这不是hibernate的问题,这是数据库优化方面的问题,比如说建立索引等
hibernate会生成简单的top等

一般的程序也是这样的,先用top简单的查询出结果集,然后再分页,性能不是问题,因为都是在服务器端生成的