Java HQL分页在不同的页面上返回相同的结果

Java HQL分页在不同的页面上返回相同的结果,java,spring,pagination,hql,javax.persistence,Java,Spring,Pagination,Hql,Javax.persistence,我们在服务器中有以下查询: Query query = this.entityManager.createQuery( "SELECT type, id, date, amount FROM Transaction ORDER BY type ASC"); 类型字段不是唯一的 为了实现分页,我们使用以下代码: query.setFirstResult(currentPage * pageSize).setMaxResults(pageSize); 这意味着,如果我们希望

我们在服务器中有以下查询:

Query query = this.entityManager.createQuery(
           "SELECT type, id, date, amount FROM Transaction ORDER BY type ASC");
类型字段不是唯一的

为了实现分页,我们使用以下代码:

query.setFirstResult(currentPage * pageSize).setMaxResults(pageSize);
这意味着,如果我们希望页面大小为10,并且总共有15个结果,客户端将发送
currentPage=0,pageSize=10
以显示第一页,并发送
currentPage=1,pageSize=10
以显示第二页

似乎在total results>page size的情况下,我们在不同的页面上得到相同的结果,并且一些结果行根本不显示(在任何页面上)。 我们猜测,这个问题与排序字段不是唯一的这一事实有关,因为如果我们使用以下查询,它不会发生:

"SELECT type, id, date, amount FROM Transaction ORDER BY type ASC, id ASC"

有人知道为什么会这样吗?如何解决呢?(除了添加id作为排序字段之外)。

为什么您不喜欢将
id
作为排序依据?您必须按某个唯一id对结果进行排序。@AleksandrM为什么排序字段需要唯一?当pageSize>=total results SizeA在查询生成输出表后(在处理选择列表后),可以选择对其进行排序,这不是问题。如果未选择排序,则将按未指定的顺序返回行。-。我仍然不知道这为什么会影响分页?即使行的顺序(在排序字段中)未指定…例如。第一次查询结果5,3,2,6,8,1;当前页面=0;页面大小=3->
5,3,2
。第二次查询结果6,1,2,5,8,3;当前页面=1;页面大小=3->
5,8,3
。为什么您不喜欢按顺序排列
id
?您必须按某个唯一id对结果进行排序。@AleksandrM为什么排序字段需要唯一?当pageSize>=total results SizeA在查询生成输出表后(在处理选择列表后),可以选择对其进行排序,这不是问题。如果未选择排序,则将按未指定的顺序返回行。-。我仍然不知道这为什么会影响分页?即使行的顺序(在排序字段中)未指定…例如。第一次查询结果5,3,2,6,8,1;当前页面=0;页面大小=3->
5,3,2
。第二次查询结果6,1,2,5,8,3;当前页面=1;页面大小=3->
5,8,3