Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在一个查询JPA中获取计数和结果_Java_Hibernate_Jpa - Fatal编程技术网

Java 在一个查询JPA中获取计数和结果

Java 在一个查询JPA中获取计数和结果,java,hibernate,jpa,Java,Hibernate,Jpa,我不熟悉Hibernate和JPA。我正在尝试使用筛选实现分页。 出于这个原因,我现在使用2个查询: query = em.createQuery("SELECT l from LoanAccount l where l."+filterColumn +" LIKE :filterValue and l.assignedBranchKey=:TaskID order by l." + orderByColumnID +" " + orrderByASC); q

我不熟悉Hibernate和JPA。我正在尝试使用筛选实现分页。 出于这个原因,我现在使用2个查询:

        query = em.createQuery("SELECT l from LoanAccount l where l."+filterColumn +" LIKE :filterValue  and l.assignedBranchKey=:TaskID order by l." + orderByColumnID +" " + orrderByASC);
        q = em.createQuery("SELECT count(l.id) from LoanAccount l where l."+filterColumn +" LIKE :filterValue and l.assignedBranchKey=:TaskID");
        query.setParameter("filterValue", "%"+filterValue+"%");
        q.setParameter("filterValue", "%"+filterValue+"%");
        q.setParameter("TaskID", TaskID);
        query.setParameter("TaskID", TaskID);

        query.setFirstResult(page*count-count);
        query.setMaxResults(count);


        result.setMaxResults((Long)q.getSingleResult());
        result.setData(query.getResultList());

        return result;
所以我在第一个查询中设置了第一个和最后一个结果,所以我无法获取列表和它的大小。这就是为什么我创建了第二个查询,并在不设置第一个和最后一个结果的情况下使用它——以获得分页的精确行数

页面-用户现在看到的是哪个页面

计数-该页中应包含多少行


是否可以合并这2个查询?如果是,我应该怎么做呢?

嘿,你也可以使用
滚动结果

下面是一个示例(未测试代码):

String hql=“从LoanAccount l中选择l,其中l.“+filterColumn+”类似于:filterValue和l.assignedBranchKey=:TaskID order by l.“+orderByColumnID+”+或derbyasc;
Query=session.createQuery(hql);
setParameter(“filterValue”,“%%”+filterValue+“%”);
query.setParameter(“TaskID”,TaskID);
int pageSize=10;
ScrollableResultsScroll=query.scroll(仅限ScrollMode.FORWARD_);
resultsScroll.first();
结果滚动滚动(0);
List LoanaCountPage=Lists.newArrayList();
int i=0;
而(页面大小>i++){
loanAccountPage.add((LoanAccount)resultScroll.get(0));
如果(!resultScroll.next())
打破
}

实际上,您不能同时组合这两个查询。 但您可以使用此JpaUtils库生成计数查询来保存一些代码/错误:

Long count = JpaUtils.count(entityManager, criteriaQuery);
更多信息请点击这里=>

Long count = JpaUtils.count(entityManager, criteriaQuery);