복붙노트

[SQL] 한계를 사용하여 JPA 2 CriteriaQuery,

SQL

한계를 사용하여 JPA 2 CriteriaQuery,

내가 기준 쿼리 유형의 안전을하고 있어요 안전을 위해 JPA 2를 사용하고 (따라서, 내가 입력 한 쿼리에 어떤 해결책을 찾고 있지 않다 등).

나는 최근에 내가 SQL-LIMIT를 설정하는 데 필요한되는 문제를 건너 왔어요.

검색을 많이 후, 난 아직 해결책을 찾는 데 실패했습니다.

CriteriaQuery<Product> query = getEntityManager().getCriteriaBuilder().createQuery(Product.class);
Root<Product> product = query.from(Product.class);
query.select(product);

return em.createQuery(query).getResultList();

캔 사람의 도움 나?

해결법

  1. ==============================

    1.제한을 정의하고 쿼리에 오프셋 :

    제한을 정의하고 쿼리에 오프셋 :

    return em.createQuery(query)
             .setFirstResult(offset) // offset
             .setMaxResults(limit) // limit
             .getResultList();
    

    문서에서 :

  2. ==============================

    2.완성도를 위해서, 나는 JPA 기준 API에 관해서 초기 질문에 대답합니다.

    완성도를 위해서, 나는 JPA 기준 API에 관해서 초기 질문에 대답합니다.

    우선, 당신은 사전에 때 때 사용 사례에 따라 기준 API를 사용하는 JPQL 등을 사용하는 자신을 명확하게 할 수도 있습니다. 내용의 ObjectDB 문서 웹 사이트에서이에 좋은 기사가있다 :

    는 JPA 기준 API를 사용하는 방법을 간결하게 설명합니다 때문에 일반적으로이 글을 추천합니다. 쿼리 API에 대한 유사한 글이 있습니다.

    질문 가기

    예를 들어 - - CriteriaQuery는 접근 제한의 세트를 제공하는 () 메서드를 사용하여. 당신이 직관적으로 추측 할 수 있듯이 : 당신은 이러한 제한과 결과의 특정 번호로 쿼리를 제한 할 수 - 당신은 ([기준 API 폐기의 사용을 만들 것입니다) 고유 식별자에 대한 제한과 같은 사소한 경우를 제외하고는. 간단히 설명 : 한계 기준 아니므 그 API에 의해 덮여 있지. 자세한 내용은 또한 이전하지만 금 자바 EE 문서를 참조하십시오.

    해결책

    그러나, 당신의 물론 JPQL 쿼리에 대한 기초로 CriteriaQuery 객체를 사용할 수 있습니다. 이다 그래서 첫째, 당신은 당신의 CriteriaQuery를 만들 :

    CriteriaQuery<Product> criteriaQuery = 
        getEntityManager().getCriteriaBuilder().createQuery(Product.class);
    Root<Product> product = criteriaQuery.from(Product.class);
    criteriaQuery.select(product);
    

    그런 다음 CriteriaQuery 개체에 대한 JPA 쿼리 생성자를 사용 :

    Query limitedCriteriaQuery = getEntityManager().createQuery(criteriaQuery)
         .setMaxResults(resultLimit); // this is the important part     
    return limitedCriteriaQuery.getResultList();
    

    그리고 당신이 문서 및 제공된 문서에 따라 두 API를 사용하는 방법을 기본적으로.

  3. from https://stackoverflow.com/questions/11655870/jpa-2-criteriaquery-using-a-limit by cc-by-sa and MIT license