Я получил следующий SQL, который я хотел преобразовать в действительный HQL.Проблема в том, что не разрешено присоединяться к подзапросу согласно docs .Несмотря на то, что это старые документы (v3.3), этот раздел все еще сохраняется в hibernate 5.3.
SELECT f.date,
f.name,
SUM(f.seats)
FROM Foo f
INNER JOIN (SELECT fl.date,
fl.start + fl.end AS code
FROM Foo fl
WHERE fl.date >= (SELECT MAX(earliestDate)
FROM Bar)
AND fl.name = :name) fl
ON f.start + f.end = code
AND f.date = fl.date
WHERE f.date >= ( SELECT MAX(earliestDate)
FROM Bar)
GROUP BY f.date,
f.name
ORDER BY f.date ASC,
SUM(f.seats) DESC
Я придумал этот HQL:
SELECT NEW com.company.project.model.FooRepresentation( f.fooId.date,
f.fooId.name,
SUM(f.seats))
FROM Foo f
INNER JOIN (SELECT fl.fooId.date,
fl.fooId.start + fl.fooId.end AS code
FROM Foo fl
WHERE fl.fooId.date >= (SELECT MAX(earliestDate)
FROM FooConfig)
AND fl.fooId.name = :name) fl
ON f.fooId.start + f.fooId.end = code
AND f.fooId.date = fl.fooId.date
WHERE f.fooId.date >= ( SELECT MAX(earliestDate)
FROM FooConfig)
GROUP BY f.fooId.date,
f.fooId.name
ORDER BY f.fooId.date ASC,
SUM(f.seats) DESC
Попытка выполнитьэтот запрос HQL приводит к исключению
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ( near line 1, column 169
, которое намекает на (
в INNER JOIN (SELECT
.
Есть ли способ присоединиться к подзапросам в HQL?Если нет, то как лучше всего достичь тех же результатов, что и в SQL с HQL?
Я не очень хорош в преобразовании inner join on <sub-query>
в фактическое предложение where
где разрешен подзапрос