java - 使用 Jpa 进行分页和排序仅从 db 返回大约 10% 的记录

标签 java sql spring spring-boot jpql

当我尝试使用 Pageable 请求从 JpaRepository 检索数据时,它仅从所有记录中返回 10%。例如,我在 MySQL 数据库中有 68 条记录,分页请求只返回前 10 条记录。当我尝试获取第二个结果集时,它返回空页面内容对象。

但如果我在一个请求中请求 100 条记录,它会返回所有 68 条记录。

我也只是尝试使用 JpaRepository 和 PagingAndSortingRepository。但结果是一样的

@Component
@Repository
public interface GRNHeaderDetailsRepo extends PagingAndSortingRepository<GrnHeader, GrnHeaderPrimaryKey> {

    @Query("SELECT grn,ld FROM GrnHeader grn left join LocationDetails ld on grn.glocationcode = ld.locationcode  WHERE grn.gdate BETWEEN ?1 AND ?2 AND (grn.gstatus ='G' OR grn.gstatus ='PG') AND (grn.grnheaderId.gsuppliercode LIKE %?3% OR grn.grnheaderId.gpono LIKE %?3% OR grn.grnheaderId.ggrnno LIKE %?3% OR grn.gdate LIKE %?3% OR grn.gtotal LIKE %?3% OR grn.gtotlinediscount LIKE %?3% OR grn.gtransactiontax LIKE %?3% OR grn.glocationname LIKE %?3% OR grn.gstatus LIKE %?3%)")
        Page<Object[]> getGrnCountDetailsCompanyWithDate(Date Date1,Date date2, String search ,Pageable page);
}

如果有人能解释原因,我将非常感激。 谢谢!

** 已更新 **

Page<Object[]> GrnHeader = grnHeaderPagingRepo.getGrnCountDetailsCompanyWithDate(new Date(),new Date(),request.getParameter("search[value]"), PageRequest.of(Integer.parseInt(request.getParameter("start")),Integer.parseInt(request.getParameter("length")), Sort.by(Sort.Direction.ASC, sorting)));

** 请求对象**

draw: 1
columns[0][data]: code
columns[0][name]: 
columns[0][searchable]: true
columns[0][orderable]: true
columns[0][search][value]: 
columns[0][search][regex]: false
columns[1][data]: po_no
columns[1][name]: 
columns[1][searchable]: true
columns[1][orderable]: true
columns[1][search][value]: 
columns[1][search][regex]: false
columns[2][data]: grn_no
columns[2][name]: 
columns[2][searchable]: true
columns[2][orderable]: true
columns[2][search][value]: 
columns[2][search][regex]: false
columns[3][data]: grn_date
columns[3][name]: 
columns[3][searchable]: true
columns[3][orderable]: true
columns[3][search][value]: 
columns[3][search][regex]: false
columns[4][data]: grn_amount
columns[4][name]: 
columns[4][searchable]: true
columns[4][orderable]: true
columns[4][search][value]: 
columns[4][search][regex]: false
columns[5][data]: outlet_name
columns[5][name]: 
columns[5][searchable]: true
columns[5][orderable]: true
columns[5][search][value]: 
columns[5][search][regex]: false
columns[6][data]: status
columns[6][name]: 
columns[6][searchable]: true
columns[6][orderable]: false
columns[6][search][value]: 
columns[6][search][regex]: false
columns[7][data]: details
columns[7][name]: 
columns[7][searchable]: true
columns[7][orderable]: false
columns[7][search][value]: 
columns[7][search][regex]: false
order[0][column]: 0
order[0][dir]: asc
start: 0
length: 10
search[value]: 
search[regex]: false
_: 1562825012290

** 第二页请求 **

draw: 2
columns[0][data]: code
columns[0][name]: 
columns[0][searchable]: true
columns[0][orderable]: true
columns[0][search][value]: 
columns[0][search][regex]: false
columns[1][data]: po_no
columns[1][name]: 
columns[1][searchable]: true
columns[1][orderable]: true
columns[1][search][value]: 
columns[1][search][regex]: false
columns[2][data]: grn_no
columns[2][name]: 
columns[2][searchable]: true
columns[2][orderable]: true
columns[2][search][value]: 
columns[2][search][regex]: false
columns[3][data]: grn_date
columns[3][name]: 
columns[3][searchable]: true
columns[3][orderable]: true
columns[3][search][value]: 
columns[3][search][regex]: false
columns[4][data]: grn_amount
columns[4][name]: 
columns[4][searchable]: true
columns[4][orderable]: true
columns[4][search][value]: 
columns[4][search][regex]: false
columns[5][data]: outlet_name
columns[5][name]: 
columns[5][searchable]: true
columns[5][orderable]: true
columns[5][search][value]: 
columns[5][search][regex]: false
columns[6][data]: status
columns[6][name]: 
columns[6][searchable]: true
columns[6][orderable]: false
columns[6][search][value]: 
columns[6][search][regex]: false
columns[7][data]: details
columns[7][name]: 
columns[7][searchable]: true
columns[7][orderable]: false
columns[7][search][value]: 
columns[7][search][regex]: false
order[0][column]: 0
order[0][dir]: asc
start: 10
length: 10
search[value]: 
search[regex]: false
_: 1562825012292

最佳答案

PageRequest.of 的 Javadoc 指出:

/**
 * Creates a new unsorted {@link PageRequest}.
 *
 * @param page zero-based page index.
 * @param size the size of the page to be returned.
 * @since 2.0
 */
public static PageRequest of(int page, int size) {
    return of(page, size, Sort.unsorted());
}

您需要传递页码而不是行号作为第一个参数(start: 1 在第二个请求中)。否则,您将在基于 0 的索引中获取第 10 页,因此您应该有超过 100 行来获取任何内容。

关于java - 使用 Jpa 进行分页和排序仅从 db 返回大约 10% 的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56982376/

相关文章:

Java:ImageIcon - 图像文件更新,但 Java 框架中的图像图标不更新

java - 在 Eclipse IDE 中调试 Java 时将异常捕获为表达式

java - 无法从基于周的字符串的 TemporalAccessor 获取 LocalDate

sql - 在查询中合并两个结果行

java - Spring Boot - CORS 过滤器适用于 GET,但不适用于其他 HTTP 动词

java - 如何使用 python 使用 Selenium WebDriver 处理身份验证弹出窗口?

mysql - 如何通过一定数量的相似数据选择一行

sql - 具有名称和最接近的富裕祖先的行

java - Spring Boot中如何获取请求的客户端IP地址?

java - RED5 RTMPConnManager 不设置 applicationContext 局部变量。这会导致 NullPointerException