Spring Репозиторий CRUD: есть findOneByMaxXYZColumn()?
Мое требование:
извлечь один объект (например, RetainInfo) из таблицы RETAIN_INFO, если столбец VERSION имеет максимальное значение
Поддерживает ли репозиторий CRUD метод интерфейса, например
findOneByMaxRetVersionAndCountry("DEFAULT")
Эквивалент db2 sql:
select RET_ID, max(ri.RET_VERSION) from RETAIN_INFO ri where ri. COUNTRY='DEFAULT' group by RET_ID fetch first 1 rows only;
- Этот запрос выбирает идентификатор, но я бы действительно хотел, чтобы объект RetainInfo соответствовал строке SINGLE, возвращаемой запросом.
Я предпочитаю получить это без использования пользовательского запроса, то есть с помощью findBy или другого метода/интерфейса, поддерживаемого Spring CRUD.
Ответы
Ответ 1
Вы можете использовать ограничение в сочетании с сортировкой (spring ссылка на данные: лимитировать результаты запроса). Объявите метод, аналогичный следующему в вашем интерфейсе CrudRepository:
RetainInfo findTopByCountryOrderByRetVersionDesc(String country);
Ответ 2
Spring Данные не предоставляют выражение для выбора максимального значения. Все поддерживаемые части запроса можно найти в документах Spring 1.2.0.RELEASE: Приложение A. Ссылка на пространство имен или строка 182 org.springframework.data.repository.query.parser.Part.
Также не стесняйтесь создавать запрос функции на странице Spring Jira.