Весенние данные, получающие записи, действительные для данного года (с полями fromDate, toDate) - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь использовать репозиторий 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); 

Однако это не дает мне все записи, которые меня интересуют.

Спасибо за вашу помощь, ребята!

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Вам стоит посмотреть справочную документацию .Это хорошо объяснено.

В вашем случае, я думаю, вы не можете использовать между, потому что вам нужно передать два параметра

Между - findByStartDateBetween… где x.startDateмежду? 1 и? 2

В вашем случае обратите внимание на использование комбинации LessThan или LessThanEqual с GreaterThan или GreaterThanEqual

  • LessThan / LessThanEqual

LessThan - findByEndLessThan… где x.start <? 1 </p>

LessThanEqual findByEndLessThanEqual… где x.start <=? 1 </p>

  • GreaterThan / GreaterThanEqual

GreaterThan - findByStartGreaterThan… где x.end>? 1

GreaterThanEqual- findByStartGreaterThanEqual… где x.end> =? 1

Вы можете использовать операторы And и Or для объединения обоих.

Вы также можете написатьПользовательский запрос, используя @Query

@Query(value = "from EntityClassTable t where yourDate BETWEEN :yearStart AND :yearEnd")
public List<EntityClassTable> getAllBetweenDates(@Param("yearStart")Date yearStart,@Param("yearEnd")Date yearEnd);

Надеюсь, это поможет вам.спасибо:)

1 голос
/ 12 марта 2019

Этот должен найти все ManualCorrection сущности, которые имеют toDate >= yearStart и fromDate <= yearEnd, что, кажется, то, что вы ищете.

 List<ManualCorrection> findByToDateGreaterThanEqualAndFromDateLessThanEqual(
     ZonedDateTime yearStart,
     ZonedDateTime yearEnd
 ); 
...