이것은 간단한 것이어야합니다.최대 절전 모드 하위 쿼리 질문
송장이 있으며 그 송장에는 지불 목록이 있습니다.
Criteria API를 사용하여 송장 목록과 지불 합계를 반환하려고합니다. 그래서, SQL에서 나는 다음과 같은 것을 원합니다 :
SELECT i.*, (SELECT SUM(PMT_AMOUNT) FROM INVOICE_PAYMENTS p WHERE p.INVOICE = i.INVOICE) FROM INVOICES i
Criteria API로 이것을 달성하는 방법을 생각할 수 없습니다. 같은 일을 :
Criteria crit = session.createCriteria(Invoice.class)
criteria.setProjection(Projections.projectionList()
.add(Projections.sum("payements.paymentAmount").as("paymentTotal"))
은 단순히 당신이 기대했던 것과 실제로 모든 송장의 예상 지급 총 1 개 행을 반환하지만 이것이 내가 얻을 수있는 가까운 거리
.도움을 주시면 대단히 감사하겠습니다.
불행히도 HQL은 여기서는 옵션이 아니며 큰 데이터 세트로 작업하므로 두 개의 쿼리를 실행하는 것이 이상적이지 않습니다. –
최대 절전 모드 네이티브 SQL 쿼리로 수행하는 것은 내가 생각할 수있는 유일한 다른 옵션에 관한 것입니다. 두 가지 쿼리 옵션을 사용하면 결과에 놀랄 수 있습니다. db는 단일 명령이 아니라 두 명령문에서 거의 동일한 작업을 수행합니다. 네트워크 IO 및 구문 분석의 추가 오버 헤드는 매우 작을 수 있습니다. –
감사합니다. 필자는 실제로 오라클 수준의 뷰를 사용하여이 문제를 해결하기로 결정한 다음 해당 뷰를 객체에 매핑했습니다. 네이티브 SQL 쿼리를 사용해 보았지만 성능이 좋지 않았습니다. 대부분의 반복 된 조인 때문에 발생했을 가능성이 큽니다. 결국 내 최종 쿼리가 다소 복잡해졌으며 심지어 HQL을 통해 작동 시키려고 시도하는 것이 어려웠을 수도 있습니다. –