gpt4 book ai didi

java - 在一次查询 JPA 中获取计数和结果

转载 作者:太空宇宙 更新时间:2023-11-04 12:55:28 25 4
gpt4 key购买 nike

我是 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;

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

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

计数 - 该页面中应有多少行

是否可以合并这两个查询?如果是的话我该怎么做?

最佳答案

嘿,您还可以使用ScrollableResults

这是一个示例(代码未经测试):

String hql = "SELECT l from LoanAccount l where l."+filterColumn +" LIKE :filterValue  and l.assignedBranchKey=:TaskID order by l." + orderByColumnID +" " + orrderByASC;
Query query = session.createQuery(hql);
query.setParameter("filterValue", "%"+filterValue+"%");
query.setParameter("TaskID", TaskID);
int pageSize = 10;

ScrollableResults resultScroll = query.scroll(ScrollMode.FORWARD_ONLY);
resultScroll.first();
resultScroll.scroll(0);
List<LoanAccount> loanAccountPage = Lists.newArrayList();
int i = 0;
while (pageSize > i++) {
loanAccountPage .add((LoanAccount ) resultScroll.get(0));
if (!resultScroll.next())
break;
}

关于java - 在一次查询 JPA 中获取计数和结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35428211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com