Как выполнить сложное условие LEFT JOIN в JPQL? - PullRequest
2 голосов
/ 15 марта 2012

Я использую JPQL для запросов модели из Play Framework.

Интересно, поддерживает ли JPQL "сложное" условие ON для LEFT JOIN.

В моем примере есть 2таблицы:

  • 'App' - список приложений
  • 'AggregationHistory' - список записей агрегации для приложения на дату.В модели есть поле «app», представляющее «многие к одному» с «App» (имя столбца «app_id» в физической таблице)

Предположим, я хочу вычислить список всехприложения, которые не имеют запись на определенную дату.

В простом SQL я получаю результат, используя следующий запрос:

SELECT a.* FROM app a LEFT JOIN aggregationhistory ah 
ON a.id = ah.app_id AND ah.fromDate =  '2012-03-14 00:00:00' 
WHERE ah.fromDate is NULL

'AND' вКонечно, условие «ВКЛ» является обязательным.

Теперь все примеры JPQL, которые я вижу, выглядят так:

SELECT a.* FROM AggregationHistory ah  LEFT JOIN ah.app a WHERE ...

Итак, единственное поддерживаемое условие «ВКЛ» - это «совпадение "из идентификаторов?(ГДЕ, кажется, мне не очень помогает)

Я могу придумать обходные пути (например, использовать "собственный запрос" или использовать JOIN, чтобы получить список приложений, которые имеют aзапись и сравнение).Но мне интересно, если запрос, который я сделал в SQL - можно преобразовать в JPQL.

Спасибо

1 Ответ

9 голосов
/ 15 марта 2012

JPQL, AFAIK, не поддерживает предложения ON, но HQL их поддерживает.Тем не менее, выбрано ключевое слово with:

select a from App a 
left join a.history h with h.fromDate = :fromDate
where h.fromDate is null
...