Как при отправке на сервер возраста, получить персону с датой рождения?
Как при отправке на сервер возраста (например 21) получить человека у которого год рождения совпадает с возрастом?
Я думал выгружать все записи с бд и проходить по всем, но, а если записей будет очень много, производительность спасибо не скажет... Сразу в голову пришло 2 варианта:
- Сначала узнаю год рождения(от переданного возраста), потом через формат привожу к LocalDate и сравниваю с датами из бд, но есть ещё день и месяц, идея и затухла;
- Ещё вариант через sql запрос сравнивать только года, но не нашел внятного объяснение как это сделать. Везде сравнивают полную дату.
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Чтобы избежать вычисления допустимого диапазона дат на стороне сервера БД с разными функциями, проще в JPA-репозитории создать метод с использованием условия BETWEEN:
List<Person> findByBirthDateBetween(LocalDate from, LocalDate to);
который аналогичен JPQL-запросу:
@Query("SELECT p FROM Person p WHERE p.BirthDate BETWEEN ?1 AND ?2")
List<Person> getPersons(LocalDate from, LocalDate to);
и реализовать дефолтный вызов такого метода для заданного возраста в годах:
default List<Person> byAge(int years) {
return findByBirthDateBetween(
LocalDate.now().minusYears(years),
LocalDate.now().minusYears(years - 1)
);
}

