Вложенный запрос с HQL/Hibernate

Из того, что я прочитал, в некоторых случаях невозможно вложить подзапросы в HQL/Hibernate.

Допустим, у меня есть таблица статей с ценой, принадлежащих группе. Мы хотим добавить их все, но можем добавить только до лимита на группу статей. На самом деле таблица денормализована, так что у нас уже есть максимальная сумма для группы в таблице статей.

Таким образом, SQL будет таким же простым, как:

SELECT SUM(case when max_amount is null then price
when price<max_amount then price
else max_amount end)
FROM
(SELECT
SUM(price) as price, group_id, max_amount
FROM articles
GROUP BY group_id, max_amount
)

Очевидно, что моя модель данных сложнее, но это моя основная проблема.

Интересно, как я могу переписать это на HQL, так как мне не разрешено вкладывать один подзапрос в другой.

Спасибо всем.


person krause    schedule 10.09.2013    source источник


Ответы (1)


Я не хотел делать это таким образом, но после некоторых исследований я мог думать только об использовании SQL-запроса в его нынешнем виде.

Что-то вроде :

String sQuery = "SELECT SUM(case when max_amount is null then price ...
final org.hibernate.SQLQuery query = session.createSQLQuery(sQuery);
List results = query.list();

Я не могу думать о том, чтобы Hibernate обрабатывал этот вложенный запрос с помощью HQL.

person krause    schedule 10.10.2013