Spring JPA 方法查找具有 beforeAndEqual 日期和 afterAndEqual 日期的实体

Mad*_*ddy 4 java spring hibernate spring-mvc spring-data-jpa

我有一个实体锦标赛如下:

class Tournament {
    //other attributes
    private LocalDate startDate;
    private LocalDate endDate;
}
Run Code Online (Sandbox Code Playgroud)

这代表从开始日期到结束日期持续几天/几个月的锦标赛。我需要检索今天运行的所有锦标赛,例如startDate <= Today && endDate >= Today,使用 Spring JPA 和分页。

我发现的最接近的如下:

@Repository
public interface TournamentRepository extends PagingAndSortingRepository<Tournament, Long> {

    Page<Tournament> findByStartBeforeAndEndAfter(LocalDate date, LocalDate dateCopy, Pageable page); //today's date is passed as date and dateCopy

}
Run Code Online (Sandbox Code Playgroud)

方法调用:

tournamentRepository.findByStartBeforeAndEndAfter(LocalDate.now(), LocalDate.now(), page);
Run Code Online (Sandbox Code Playgroud)

这可以解释为startDate < Today && endDate > Today,因此如果锦标赛在今天运行且仅持续 1 天,则该方法不起作用。

有没有更好的方法使用 Spring JPA 来执行此操作,而无需编写自定义查询?

kar*_*sen 6

您可以将 LessThan、GreaterThan、LessThanEqual、GreaterThanEqual 与日期一起使用。

@Repository
public interface TournamentRepository extends PagingAndSortingRepository<Tournament, Long> {

    Page<Tournament> findByGreaterThanEqualStartDateAndLessThanEqualEndDate(LocalDate date, LocalDate dateCopy, Pageable page); //today's date is passed as date and dateCopy

}
Run Code Online (Sandbox Code Playgroud)