HQL-запрос для возврата самой последней записи, но с учетом двух (не одного) столбцов даты - PullRequest
1 голос
/ 17 мая 2019

У меня есть таблица для хранения предметов, и я хочу получить самую последнюю созданную или обновленную запись. В таблице есть «созданный» столбец даты и «обновленный» столбец даты. Конечно, я мог бы легко по отдельности извлечь запись с последней датой создания и запись с самой последней обновленной датой, а затем сравнить их в моем коде. Но, частично из соображений производительности, я бы предпочел сделать это с помощью одного HQL запроса и получить только одну запись назад.

Не думаю, что это такая необычная потребность, но поиск в Google не выявил онлайн-примеров, отвечающих всем требованиям.

Кстати, вот запрос HQL , который я написал, но он содержит ошибки. Я впервые пытался использовать greatest() в именованном запросе HQL .

Select m from Movement as m inner join fetch m.vessel as v where greatest(m.created, m.updated) and m.status = 'ACTIVE' and v.id = :vesselId

С уважением,

Крис.

1 Ответ

0 голосов
/ 17 мая 2019

Функция GREATEST возвращает наибольшее или наибольшее значение в списке значений или выражений

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

Select m from Movement as m inner join fetch m.vessel as v where m.status = 'ACTIVE' and v.id = :vesselId order by CASE WHEN  m.updated is null THEN m.created ELSE greatest(m.created, m.updated) END DESC 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...