#hibernate #jpa #spring-data-jpa #spring-data #persistent
#спящий режим #jpa #spring-data-jpa #весна-данные #постоянный
Вопрос:
Я пытаюсь использовать репозиторий JPA для фильтрации некоторых записей из базы данных.
Я получил объект с полями:
@Column(name = "from_date", nullable = false)
private ZonedDateTime fromDate;
@Column(name = "to_date", nullable = true)
private ZonedDateTime toDate;
Мне нужно выбрать все записи, имеющие место за данный год (в латах, скажем, 2018).
Сложная часть: если ‘from_date’ относится к 2017 году, а ‘to_date’ — к т.е. 2019, я хочу включить эту запись.
Не могли бы вы, пожалуйста, дать мне некоторую идею, как с этим разобраться? Возможно ли получить это только одним методом? Если возможно, я хотел бы использовать методы запроса.
На данный момент я изобрел метод:
List<ManualCorrection> findByFromDateGreaterThanEqualAndFromDateLessThanAndToDateGreaterThanEqual(ZonedDateTime yearStart,ZonedDateTime yearEnd, ZonedDateTime yearStart2);
Однако это не дает мне всех записей, которые меня интересуют.
Спасибо за вашу помощь, ребята!
Ответ №1:
Это должно найти все ManualCorrection
объекты, у которых есть toDate >= yearStart
и a fromDate <= yearEnd
, которые, похоже, являются тем, что вы ищете.
List<ManualCorrection> findByToDateGreaterThanEqualAndFromDateLessThanEqual(
ZonedDateTime yearStart,
ZonedDateTime yearEnd
);
Комментарии:
1. пожалуйста, объясните свой ответ вместе с вашим кодом. Это также поможет будущему читателю.
2. Прошу прощения, Йенс — моя ошибка, у меня была ошибка где-то в другом месте. Ваш ответ был отличным с самого начала, большое вам спасибо! Я не хочу вас снова беспокоить, но мне интересно, возможно ли расширить этот метод и обрабатывать ‘null’ в поле ‘ToDate’ как «бесконечное» (никогда не заканчивается)? Простое решение, такое как: findByToDateIsNullOrToDateGreaterThanEqualAndFromDateLessThanEqual, не похоже на решение. На данный момент у меня только что появился другой метод для такого рода записей, но я все равно присоединяюсь к результатам.
3. Для достижения этого вы могли бы использовать
@Query
аннотацию и некоторые( .... or x IS NULL)
другие.