mysql - EclipseLink (JPA 2.1) 查询未返回明显应该返回的结果

标签 mysql jpa eclipselink

我正在尝试使用下面的代码从数据库中检索下一页结果。

   public Collection<Product> getCategoryProducts(Category selectedCategory, String start) {
        Query query = em.createQuery("SELECT p FROM Product p WHERE p.categoryId = :categoryId")
                .setParameter("categoryId", selectedCategory)
                .setMaxResults(20);
        if (null != start) {
            query.setFirstResult(Integer.parseInt(start));
        }
        return query.getResultList();
    }

我的产品表大约有 1000 行,其中每个产品都属于一个类别。 如果我选择一个类别,例如类别 1,其中有 80 个产品。我可以查看 4 页产品,每页有 20 个产品。当我尝试访问属于更高类别 ID 的产品时,问题就出现了。我只能查看前 20 个结果,但下一页返回 0 个结果。 例如,类别 15 的产品范围为 id=459 到 id=794,其中 id 是主键

当我从 https://localhost:8181/myapp/category?categoryId=15 访问类别页面但单击底部的更多链接时,查询将返回前 20 个结果https://localhost:8181/myapp/category?categoryId=15&start=478 返回 0 个结果。我错过了什么?

另请参阅这个问题 is similar to this

最佳答案

我终于发现了我的错误。显然,我为第一个结果设置的位置应该是页码和页面大小的乘积。就我而言,我将第一个结果设置为我正在检索的实体的 Id。因此,对于前几页,结果大小包含 ID,但随着页码的增加,id 不包含在结果集中。这是一种你不知道的错误,直到你知道你不知道为止。

public Collection<Product> getCategoryProducts(Category selectedCategory, String page) {
    int pageSize = 20;
    EntityManager entityManager = Persistence.createEntityManagerFactory("techbayPU").createEntityManager();
    Query query = entityManager.createQuery("SELECT p FROM Product p WHERE p.categoryId = :categoryId ORDER BY p.id", Product.class);
    query.setMaxResults(pageSize);
    if (null != page) {
        query.setFirstResult(Integer.parseInt(page) * pageSize);
    }
    query.setParameter("categoryId", selectedCategory);
    return query.getResultList();
}

关于mysql - EclipseLink (JPA 2.1) 查询未返回明显应该返回的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44293647/

相关文章:

mysql - 如何使用多个 where 子句联合或连接多个表?

php - 使用下拉菜单更改 mysql 文本框值 PHP,mysql

java - eclipselink jpa 使用 COUNT(id) 而不是 COUNT(*) 生成计数查询

java - Hibernate 多对一急切获取 N+1

java - 将持久化实体更改为同级子类

java - JPA/EclipseLink 和向后兼容的枚举映射

eclipselink - 在测试环境中使用 Eclipselink 和 h2 生成序列时出现异常

c# - 使用c#在mysql中插入引号

php - 如何使用 PHP 根据该值将具有匹配列值的 MySQL 查询结果放入关联数组?

java - EclipseLink 不使用嵌套的 Lazy OneToMany 关系填充 Lazy OneToOne