HQL подзапросы в соединениях - PullRequest
0 голосов
/ 17 июля 2009

У меня есть класс Order, который содержит набор OrderSection, который сам содержит набор OrderItem's.

В SQL можно использовать инструкцию SELECT в предложении JOIN, как это сделано в следующем запросе:

SELECT
    o.id,
    o.amount,
    sum(s.quantity*s.price),
    sum(s.quantity*i.price)
FROM
    orders AS o
    JOIN ordersections AS s ON s.order_id=o.id
    JOIN (SELECT section_id, sum(quantity*price) AS price FROM orderitems GROUP BY section_id) AS i ON i.section_id=s.id
GROUP BY o.id, o.amount

Можно ли выразить такой запрос в HQL?

1 Ответ

2 голосов
/ 17 июля 2009

Если я что-то упустил, ваш запрос может быть переписан в SQL как:

SELECT
  o.id,
  o.amount,
  sum(s.quantity*s.price),
  sum(s.quantity*i.quantity*i.price)
FROM orders AS o
  JOIN ordersections AS s ON s.order_id=o.id
  JOIN orderitems AS i ON i.section_id=s.id
GROUP BY o.id, o.amount

В этом случае его можно переписать на HQL следующим образом:

SELECT
  o.id,
  o.amount,
  sum(s.quantity*s.price),
  sum(s.quantity*i.quantity*i.price)
FROM orders AS o
  JOIN o.sections AS s
  JOIN s.items AS i
GROUP BY o.id, o.amount

Если я что-то упускаю и приведенный выше запрос не возвращает того, что вы хотите, вам не повезло с преобразованием HQL, поскольку Подзапросы в HQL могут появляться только в предложениях SELECT или WHERE . Однако вы можете отобразить ваш запрос как <sql-query> - в конце не должно быть никаких различий.

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