는 다음과 같은 두 개의 테이블을 고려JPA Criteria API의 Subquery에서 ORDER BY를 사용하는 대안은 무엇입니까?
Project (id, project_name)
Status (id, id_project, status_name)
Status
가
Project
가되어있는 모든 상태를 포함
.
최신 상태가 "new"인 모든 프로젝트를 쿼리하려고합니다. 내가 가지고 올 SQL 쿼리입니다 : 내가 기준 API를 사용하여 위의 쿼리를 복제하기 위해 노력하고있어 나는 클래스 CriteriaQuery이 방법 orderBy
을 가지고 있지만 클래스 Subquery하지 않는 것으로 나타났습니다
SELECT q.id_project FROM status q
WHERE q.status_name like 'new'
AND q.id IN (
SELECT TOP 1 sq.id from status sq
WHERE q.id_project = sq.id_project
ORDER BY sq.id DESC)
.
지금까지 마련이다 한 기준 쿼리 : Subquery sq
그 결과를 정렬 및 최신 하나를 반환하기위한 어떤 방법이 없기 때문에 내가 여기에 붙어있어
CriteriaQuery<Project> q = criteriaBuilder.createQuery(Project.class);
Root<Status> qFrom = q.from(Status.class);
Subquery<Integer> sq = q.subquery(Integer.class);
Root<Status> sqFrom = sq.from(Status.class);
sq.select(sqFrom.get(Status_.id))
.where(criteriaBuilder.equal(sqFrom.get(Status_.project), qFrom.get(Status_.project))
.
위에서 설명한 시나리오에서 원하는 결과를 얻으려면 하위 쿼리를 정렬하는 대신 어떤 방법을 사용할 수 있습니까?
가 문자열 기반 JPQL 허용하지 않습니다 상관되지 않은 형태로 집계 함수와 하위 쿼리, 그래서 나는 상관 하위 쿼리를 작성하는 것은 명시 적으로 성능 현명한 (예 JPQL를 사용하여 아래 기준 API 동등한은 간단합니다) 더 낫다고 생각한다 ORDER BY는 하위 쿼리에서 사용되며 Criteria는이를 간단히 나타냅니다. "subquery :: = simple_select_clause subquery_from_clause [where_clause] [groupby_clause] [having_clause]" –
@NeilStockton 나는 대체 솔루션 –
을 요청하는 이유 때문에 "sq.id"의 가장 높은 값을 하위 쿼리 (where 절을 준수)? "SELECT MAX (sq.id) FROM status sq WHERE q.id_project = sq.id_project"하위 쿼리를 수행 할 수 있습니까? –