제한을 사용하는 JPA 2 CriteriaQuery
저는 JPA 2를 사용하고 있습니다. 안전상의 이유로 CriteriaQuery를 사용하여 안전한 형식으로 작업하고 있습니다 (따라서 형식화 된 쿼리에 대한 솔루션을 검색하지 않습니다).
최근에 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();
누구든지 나를 도울 수 있습니까?
return em.createQuery(query)
.setFirstResult(offset) // offset
.setMaxResults(limit) // limit
.getResultList();
문서에서 :
TypedQuery setFirstResult (int startPosition)
검색 할 첫 번째 결과의 위치를 설정합니다. 매개 변수 : startPosition -0부터 번호가 매겨진 첫 번째 결과의 위치
TypedQuery setMaxResults (int maxResult)
검색 할 최대 결과 수를 설정합니다.
완전성을 위해 JPA Criteria API와 관련된 초기 질문에 답하고 싶습니다.
우선 , 사용 사례에 따라 JPQL을 사용할시기와 Criteria API를 사용할시기를 미리 스스로 명확히 할 수 있습니다. ObjectDB 문서 웹 사이트 에 다음과 같은 멋진 기사 가 있습니다.
기준 API 사용의 주요 이점은 런타임이 아닌 컴파일 중에 오류를 더 일찍 감지 할 수 있다는 것입니다. 반면에 많은 개발자에게 SQL 쿼리와 매우 유사한 문자열 기반 JPQL 쿼리는 사용하고 이해하기가 더 쉽습니다.
이 기사는 JPA Criteria API를 사용하는 방법을 간결하게 설명하기 때문에 일반적으로 권장합니다. Query API 에 대한 유사한 기사가 있습니다.
질문으로 돌아 가기 :
A CriteriaQuery
는 where()
메서드 를 사용하여 액세스 할 수있는 제한 집합을 제공합니다 . 직관적으로 짐작할 수 있듯이, 이러한 제한이있는 특정 수의 결과로 쿼리를 제한 할 수는 없습니다. 단, 고유 식별자 제한 (기준 API 사용을 쓸모 없게 만드는)과 같은 사소한 경우를 제외하고는 쿼리를 제한 할 수 없습니다. 간단히 설명 : 제한은 기준이 아니므로 해당 API에 포함되지 않습니다. 자세한 내용은 오래되었지만 금색 인 Java EE 문서 를 참조하십시오.
해결책
그러나 물론 CriteriaQuery 객체를 JPQL 쿼리의 기초로 사용할 수 있습니다. 따라서 먼저 CriteriaQuery를있는 그대로 만듭니다.
CriteriaQuery<Product> criteriaQuery =
getEntityManager().getCriteriaBuilder().createQuery(Product.class);
Root<Product> product = criteriaQuery.from(Product.class);
criteriaQuery.select(product);
그런 다음 객체에 JPA Query
생성자를 사용 CriteriaQuery
합니다.
Query limitedCriteriaQuery = getEntityManager().createQuery(criteriaQuery)
.setMaxResults(resultLimit); // this is the important part
return limitedCriteriaQuery.getResultList();
그리고 그것은 기본적으로 문서와 제공된 기사에 따라 두 API를 모두 사용해야하는 방법입니다.
참조 URL : https://stackoverflow.com/questions/11655870/jpa-2-criteriaquery-using-a-limit
'development' 카테고리의 다른 글
스토리 보드에서 "initwithNibName"을 어떻게 변경합니까? (0) | 2021.01.05 |
---|---|
MySQL InnoDB 삽입이 왜 그렇게 느린가요? (0) | 2021.01.05 |
배열을 병합하고 키를 보존하는 방법은 무엇입니까? (0) | 2021.01.05 |
tkinter로 창 크기가 조정되는 것을 어떻게 막을 수 있습니까? (0) | 2021.01.05 |
일련의 약속을 동기화하는 방법은 무엇입니까? (0) | 2021.01.05 |