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简单的查询出结果集,然后再分页,性能不是问题,因为都是在服务器端生成的