【问题标题】:JPA Qyery to find records between a rangeJPA查询以查找范围之间的记录
【发布时间】:2014-11-17 11:15:24
【问题描述】:

我在一个表中有 100 万条记录,想使用 EJB3.1(JPA QUERY) 一次获取 1000 条记录,但没有得到任何好的方法,LIMIT 是 JPA 的意外标记。所以请建议我一种在方法调用中获取有限记录的方法。我使用了setFirstRsult(count)setMaxResult(count+1000),但是在下一个方法调用 firstResult Set 每次从 0 开始而不是从 1001 开始,更新 setFirstResult 计数我正在维护计数器。但仍然没有得到任何解决方案。

String query = "select a from CourseMasterBo a";
        List<CourseMasterBo> list = new ArrayList<CourseMasterBo>();
         list = manager.createQuery(query).setFirstResult(4).setMaxResults(8).getResultList();
         logger.info("list size--------"+list.size());   


 I should get 4 as size of list but i am getting 8 ,starting from intial to 8th records in db.
below is my query and answer---->
17:39:47,435 INFO  [com.infinite.gndu.academicDtos.AcademicYear] list size--------8

【问题讨论】:

  • 是的,先生,我每次都维护计数器而不是 setFirstResult 从 0 开始,你有没有实现过,我没有得到正确的结果,如果你知道怎么做,请与我分享代码跨度>
  • 显示一些代码,到目前为止你做了什么?
  • Hey Ean 我已经在下面发布了我的代码,请查看并纠正我
  • 您的代码应该张贴在问题中,而不是作为答案。编辑帖子

标签: java mysql hibernate jpa


【解决方案1】:

如果您只想获取 100 条记录而不是设置 setMaxResult(100) 并且不更改 setMaxResult 值并继续更改 setFristResult(),我得到了答案,例如 0.101,100 总是给您 100 个结果。

【讨论】:

    【解决方案2】:

    试试这个:

    //....
    int queryResultSize = 1000000;
    
    public List getResultQuery(queryResultSize){
        String SQL_QUERY = "SELECT ...."; // your query
        List resultList = new ArrayList(); // Add the specific type of the result
    
        for(int i = 0; i < queryResultSize; i++){
            resultList.addAll(entityManager.createQuery(SQL_QUERY).setParameter(arg0,arg1).
                setFirstRsult(i).setMaxResults(1000 + i).getResultList());
        }
    
        return resultList;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 2014-12-06
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多