Весенние данные, получающие записи, действительные для данного года (с полями FromDate, сегодняшняя дата)

#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) другие.