大数据量下的JPA分页问题。

kenvinp 2009-08-30 06:35:28
jpa使用toplink实现。数据表有200多万的记录。 一运行下面的分页查询就出现这个错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2931)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2871)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3414)

代码:

public class PagingTest {
EntityManagerFactory emf = null;
private javax.persistence.EntityManager em;
/**
* @param args
*/
public static void main(String[] args) {
PagingTest pTest= new PagingTest();
pTest.testPaging();

}
public void testPaging(){
emf = EntityManagerHelper.getEmf();
em= emf.createEntityManager();
Query rowCountQuery = em.createQuery("SELECT COUNT(c) FROM Customer c"); // NOI18N
int size =((Long) rowCountQuery.getSingleResult()).intValue();
System.out.println(size);
final Query getRowsQuery = em.createQuery("select c from Customer c");
System.out.println("numer of requests to the database " + counter++);
Query query = getRowsQuery.setMaxResults(20).setFirstResult(1000000);//这里如果设置为setFirstResult(100000); 就可以运行。

//add the cache
List<Customer> resultList = query.getResultList();
System.out.println("=====query done " );
for(Customer cust:resultList){
System.out.println("cust:"+cust.getCustomerId()+","+cust.getCustomerName());
}
}

private javax.persistence.EntityManager entityManager1;
private javax.persistence.Query getRowsQuery;
private javax.persistence.Query rowCountQuery;

private List<Customer> getList() {
getRowsQuery = java.beans.Beans.isDesignTime() ? null : entityManager1.createQuery("SELECT c FROM Customer c"); // NOI18N
rowCountQuery = java.beans.Beans.isDesignTime() ? null : entityManager1.createQuery("SELECT COUNT(c) FROM Customer c"); // NOI18N

List<Customer> toReturn = new ResultListJPA<Customer>(rowCountQuery, getRowsQuery);
return toReturn;
}

private int counter=0;

}

请问高手怎么解决这个问题?
...全文
667 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zw393 2009-09-06
  • 打赏
  • 举报
回复
按需查找

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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