#postgresql #hibernate
#postgresql #спящий режим
Вопрос:
У меня есть три таблицы: «пользователь», с которым связана одна или несколько строк в таблице «contractYear», которая состоит из строк в таблице «contract_month».
Я хочу получить результирующий набор пользователей, у которых нет месяцев контракта на текущий контрактный год (т. Е. Контрактный год.EndDate < текущая дата)
Я сделал следующий запрос:
@Query("select distinct u "
" from User u "
" left join u.contractYears cy"
" on cy.endDate < now()"
" left join cy.contractMonths cm"
" where cm is null")
Но это не работает…
Я предполагаю, что условие "on cy.endDate < now()"
неверно.
Может быть, кто-нибудь может помочь мне составить правильный запрос?
Комментарии:
1. Но это не работает … вы получаете неправильные результаты или ошибку?
2. @M Khalid Junaid, я получаю неверный результат: я получаю всех пользователей, у которых есть текущий год контракта. Я предполагаю, что условие «где cm равно нулю» игнорируется.
3.
user
является зарезервированным именем в Postgres. Лучше не использовать его в качестве идентификатора (таблицы или столбца).4. Я прошу прощения за то, что забыл об этом. В реальном случае моя таблица называется немного по-другому. я использовал имя «пользователь» только для примера
Ответ №1:
В HQL, если вам нужен дополнительный фильтр в предложении join, вы можете добавить, используя WITH
ключевое слово
select distinct u
from User u
left join u.contractYears cy
with cy.endDate < now()
left join cy.contractMonths cm
where cm is null