2017-05-31 12 views
0

以下のコードを使用して、データベースから次の結果ページを取得しようとしています。EclipseLink(JPA 2.1)明示的に必要な結果が返されないクエリ

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種類の商品を選んだ場合、私は20ページの製品でそれぞれ4ページのページを見ることができます。より高いカテゴリIDに属する製品にアクセスしようとすると問題が発生します。私は最初の20の結果しか見ることができませんが、次のページは0の結果を返します。 例えば、カテゴリ15は、id=459 to id=794 where id is the primary keyの範囲の製品を有する。

https://localhost:8181/myapp/category?categoryId=15からカテゴリページにアクセスしたときに、最初の20個の結果が返されますが、下部のmoreリンクをクリックすると、https://localhost:8181/myapp/category?categoryId=15&start=478は0の結果を返します。私は何が欠けていますか?

この質問is similar to this

答えて

0

は、私はようやく私の誤りを発見したも参照してください。明らかに、私が最初の結果のために設定しているのは、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(); 
} 
関連する問題