74

我有这个模型:

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例如(我将通过 9 月 30 日作为日期,需要找到所有在其start和9 月 30 日之间的条目end

findDateisBetweenStartAndEnd(Date date)什么?

4

5 回答 5

119

您应该查看参考文档。这很好解释。

在你的情况下,我认为你不能使用 between 因为你需要传递两个参数

之间- findByStartDateBetween … 其中 x.startDate 介于 ?1 和 ?2 之间

在您的情况下,请查看使用or的组合LessThanorLessThanEqualGreaterThanGreaterThanEqual

  • 小于/小于等于

LessThan - findByEndLessThan … 其中 x.start< ?1

LessThanEqual findByEndLessThanEqual … 其中 x.start <= ?1

  • 大于/大于等于

GreaterThan - findByStartGreaterThan … 其中 x.end> ?1

GreaterThanEqual - findByStartGreaterThanEqual … 其中 x.end>= ?1

您可以使用运算符And并将Or两者结合起来。

于 2016-09-30T07:36:35.113 回答
53

我确实使用了以下解决方案:

findAllByStartDateLessThanEqualAndEndDateGreaterThanEqual(OffsetDateTime endDate, OffsetDateTime startDate);
于 2018-03-08T10:13:16.570 回答
29

您还可以使用编写自定义查询@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 等。

于 2019-02-22T13:00:26.910 回答
0

也许你可以试试

List<Article> findAllByPublicationDate(Date publicationDate);

可以在这篇文章中检查详细信息:

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

于 2020-11-27T07:00:38.467 回答
0

您可以使用 JpaRepository

List<Entity> findByColumnDateBetween(LocalDateTime to, LocalDateTime from);
于 2022-02-09T16:01:06.740 回答