Hibernate+Spring获取Mysql百万数据问题。

qianshangding 2011-07-13 09:20:13
mysql数据库有100万左右的数据。现在要将数据全部取出。建立索引。
取数据的方式:for循环。每次获取500条数据。
不过会出现java.lang.OutOfMemoryError: Java heap space的异常
当eclipse内存大小设置为-Xms512m -Xmx1024m 没有问题。
如果数据又加大了,比如200万,300万,甚至是更大,这也不是解决的办法啊
各位兄弟姐妹,看看有没有其他的解决方案

分页函数:
public List<Product> batchSelectVideo(final String sql, final int firstRow,
final int pageSize) throws DAOException {
return this.getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session) throws SQLException,
HibernateException {
Query q = session.createQuery(sql);
q.setFirstResult(firstRow);
q.setMaxResults(pageSize);
return q.list();
}
});
}

获取总记录数:
@Override
public long countIndexTotalPage(String hql, int pageSize) throws DAOException {
Session session = super.getSession();
Long totalNum = (Long)session.createQuery(hql).uniqueResult();
totalNum = totalNum.longValue();
long totalPage = totalNum / pageSize;
if (totalNum % pageSize != 0 || totalPage == 0) {
totalPage++;
}
SessionFactoryUtils.releaseSession(session, getSessionFactory());
return totalPage;
}
...全文
170 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qianshangding 2011-07-15
  • 打赏
  • 举报
回复
谢谢大家,可能是hibernate配置了subclass导致联表查询的问题
三心不可得 2011-07-13
  • 打赏
  • 举报
回复
每次处理完500条之后就把缓存给清了就是了。

for(int i=0,...)
{
if(i%500 == 0)
{
session.clear();
}
}
qianshangding 2011-07-13
  • 打赏
  • 举报
回复
不是缓存所有数据,只是一次取500条,然后处理这500条数据,然后建立索引,然后继续取500条。
这样也会堆栈溢出
zn85600301 2011-07-13
  • 打赏
  • 举报
回复
需要把所有数据都放在内存里面? tomcat本身内存就没多大
要么分页查询 要么使用缓存技术 memcached等技术

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧