EclipseLink (JPA 2.1) 查询未在明确应返回的位置返回结果
EclipseLink (JPA 2.1) Query not returning results where it clearly should
我正在尝试使用以下代码从数据库中检索下一页结果。
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();
}
我的产品 table 有大约 1000 行,其中每个产品属于一个类别。
如果我选择一个类别,例如类别 1,它有 80 种产品。我可以查看 4 页的产品,每页有 20 种产品。当我尝试访问属于更高 categoryId 的产品时出现问题。我只能查看前 20 个结果,但下一页 returns 0 个结果。
例如,类别 15 的产品范围为 id=459 to id=794 where id is the primary key
.
当我从 https://localhost:8181/myapp/category?categoryId=15
访问类别页面但单击底部的更多 link 时,查询将 return 前 20 个结果 https://localhost:8181/myapp/category?categoryId=15&start=478
returns 0 个结果。我错过了什么?
另见这个问题is similar to this
我终于找到了我的错误。显然我为第一个结果设置的位置应该是 page number and the page size
的乘积。在我的例子中,我将第一个结果设置为我正在检索的实体的 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();
}
我正在尝试使用以下代码从数据库中检索下一页结果。
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();
}
我的产品 table 有大约 1000 行,其中每个产品属于一个类别。
如果我选择一个类别,例如类别 1,它有 80 种产品。我可以查看 4 页的产品,每页有 20 种产品。当我尝试访问属于更高 categoryId 的产品时出现问题。我只能查看前 20 个结果,但下一页 returns 0 个结果。
例如,类别 15 的产品范围为 id=459 to id=794 where id is the primary key
.
当我从 https://localhost:8181/myapp/category?categoryId=15
访问类别页面但单击底部的更多 link 时,查询将 return 前 20 个结果 https://localhost:8181/myapp/category?categoryId=15&start=478
returns 0 个结果。我错过了什么?
另见这个问题is similar to this
我终于找到了我的错误。显然我为第一个结果设置的位置应该是 page number and the page size
的乘积。在我的例子中,我将第一个结果设置为我正在检索的实体的 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();
}