Проверить дату между двумя другими датами весенних данных jpa

У меня есть эта модель:

public class Event {
    private String name;
    private Date start;
    private Date end;
}

и репозиторий как

@Repository
public interface EventRepository extends JpaRepository<Event, Long> {
    List<Event> findByEventTypeAccount(Account account);
}

Что я хочу сделать, так это передать одну дату, и мне нужно проверить, что дата находится между start и end, например (я передам 30 сентября как дату и мне нужно найти все записи, которые имеют 30 сентября между их start и end)

Что-то вроде findDateisBetweenStartAndEnd(Date date)?


person Don Jose    schedule 30.09.2016    source источник
comment
Вы должны взглянуть на справочную документацию: docs.spring.io/spring-data/jpa/docs/current/reference/html/. Это хорошо объяснено.   -  person Pau    schedule 30.09.2016


Ответы (4)


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

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

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

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

  • Меньше/Меньше, чемРавно

LessThan - findByEndLessThan … где x.start‹ ?1

LessThanEqual findByEndLessThanEqual … где x.start ‹= ?1

  • Больше, чем/Больше, чем равно

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

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

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

person Pau    schedule 30.09.2016
comment
Привет, это возможно со строковыми значениями? Так, например, с таблицей лиц и выберите все от lastname = abcd до lastname = efgh - person Ivor; 12.09.2018
comment
@Pau Разве имена методов не должны быть findByStartLessThan\Equal и findByStartGreaterThan\Equal, чтобы они соответствовали JPQL (т.е. where x.start <\= ?1и where x.end >\= ?1)? - person Snozzlebert; 12.02.2019
comment
не могли бы вы сказать мне, какой формат даты вы передаете от клиента к контроллеру вызовов метода findDateisBetweenStartAndEnd ?? Я придерживался части формата, когда отправляю запрос через клиент для конечной точки. - person Indrajeet Gour; 19.09.2019
comment
как добавить условие where для другого атрибута? между и где вместе в одном запросе в весенних данных jpa? - person Sumanth Varada; 21.11.2019

Я использовал следующее решение для этого:

findAllByStartDateLessThanEqualAndEndDateGreaterThanEqual(OffsetDateTime endDate, OffsetDateTime startDate);
person Michaël Cuypers    schedule 08.03.2018
comment
Пожалуйста, добавьте небольшое (более подробное) объяснение? - person Yannick Huber; 08.03.2018
comment
но для этого нужно пройти две даты начальную и конечную, я думаю это правильный подход - person Ivor; 24.01.2019
comment
Порядок колясок неправильный. Во-первых, параметр связан с startDate, а не endDate. - person Jordan Silva; 20.05.2020
comment
@JordanSilva, порядок параметров правильный, так как он проверяет, что один период пересекается с другим, но не является другим периодом полностью внутри периода проверки. - person Nemo; 16.01.2021

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

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

Изменить: для LocalDateTime я только что попробовал это решение для фильтрации записи на основе даты и типа в spring JPA:

Page<MyEntity> findMyEntityByEntityDateBetweenAndType(
            @Param("startDate") LocalDateTime startDate,
            @Param("endDate") LocalDateTime endDate, @Param("type") String type, Pageable pageable);

Здесь EntityDate может быть как CreatedDate, ModifiedDate и т.д.

person Vikash Kumar    schedule 22.02.2019
comment
как он будет обрабатывать нулевые даты начала и окончания? - person saran3h; 01.04.2021

Может быть, вы могли бы попробовать

List<Article> findAllByPublicationDate(Date publicationDate);

Детали можно проверить в этой статье:

https://www.baeldung.com/spring-data-jpa-query-by-date

person Wu Yaozu    schedule 27.11.2020
comment
Это комбинация необъяснимого кода и ссылки. Пожалуйста, добавьте объяснение того, как работает код и как он должен решить проблему. Без такого объяснения ваш пост распространяет заблуждение о том, что StackOverflow — это платформа для торговли неоплачиваемой работой по программированию. Внешняя ссылка не считается таким объяснением. Ответ только по ссылке может быть удален. - person Yunnosch; 27.11.2020