Надеюсь, это будет простой.Hibernate Subquery Вопрос
У меня есть счет-фактура, и у счета есть список платежей.
Использование 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 здесь не вариант, и я работаю с большим набором данных, поэтому запуск двух запросов тоже не идеален. – 2009-10-14 20:28:58
делать это как спящий родной sql-запрос - это единственный вариант, о котором я могу думать. Дайте два варианта запроса, вы можете быть удивлены результатом, db будет делать примерно ту же работу только в двух операциях, а не в одном, дополнительные накладные расходы на сетевом IO и синтаксический анализ могут быть довольно маленькими. –
Спасибо. Я на самом деле решил решить это, используя представление на уровне оракула, а затем просто сопоставил это представление с объектом. Я попытался использовать собственный SQL-запрос, но он не работал хорошо, скорее всего, из-за многочисленных повторных подключений. Оказывается, мой окончательный запрос был довольно сложным в любом случае, и попытка заставить его работать даже через HQL, возможно, была сложной задачей. – 2009-10-15 17:02:49