편집 : JPA가이를 표현할 수 없다는 것이 밝혀졌습니다. 솔루션은 SQL로 다시 작성하는 것이 었습니다.QueryDSL의 특정 필드에서 고유 항목을 계산하는 방법
QueryDSL을 사용하여보고를 위해 JPA 데이터 세트에서 집계 쿼리를 수행하고 있습니다. 보고서 데이터를 추출하는 데 문제가 없습니다. 예를 들어 :
...
query = query.groupBy(QVehicle.vehicle.make, QVehicle.vehicle.model);
return query.listDistinct(new QMakeModelReportData(
QVehicle.vehicle.make, QVehicle.vehicle.model,
QVehicle.vehicle.make.count()));
이것은 차량 제조사, 차량 모델, 그리고 메이크업 모델의 차량의 수를 포함하고, 각각의 내 DTO 객체의 목록을 생성합니다. 이와 같이 :
Ford, Focus, 14
Ford, Mondeo, 4
Vauxhall, Astra, 4
실제로 쿼리를 수행하기 전에 구문을 계산할 수 없습니다. 나는 오히려 비효율적 옵션으로 결국 한
return query.countDistinct(QVehicle.vehicle.make, QVehicle.vehicle.model);
:
return query
.listDistinct(QVehicle.vehicle.make, QVehicle.vehicle.model)
.size();
아무것도 더 나은 거기에 내가 상상하는 구문은 존재하지 않는, 이런 느낌?
JPQL을 통해 필요한 것을 직접 표현할 수 있습니까? –
그게 내가 월요일 아침에 시험 할거야. JPA 밑으로 가서 SQL로 질의를하는 것도 고려할 것입니다. SQL은 매우 쉽게 표현할 수 있습니다. –
서브 쿼리를 사용하여 아마도이 SQL에 해당하는 부분에 도달해야한다고 생각합니다. 하위 쿼리로'v'emake, v.model에 의해 차량 v 그룹에서 select sum (count) 이것은 (또는 더 단순한''선택 횟수 (v. vehicle v.의 v.model)는 JPQL에서 표현할 수있다. –