Spring 数据获取给定年份有效的记录(包含字段 fromDate、toDate)

Spring data getting records valid for given year (with fields fromDate, toDate)

我正在尝试使用 JPA 存储库从数据库中过滤一些记录。

我得到了一个包含以下字段的实体:

@Column(name = "from_date", nullable = false)
private ZonedDateTime fromDate;

@Column(name = "to_date", nullable = true)
private ZonedDateTime toDate;

我需要 select 给定年份(lats 说 2018)发生的所有记录。 棘手的部分是:如果 'from_date' 来自 2017 年,但 'to_date' 是 ie。 2019年,我想包括那张唱片。

你能给我一些想法吗?如何解决?是否有可能只用一种方法得到它? 如果可能的话,我想使用查询方法。

目前我发明的方法:

List<ManualCorrection> findByFromDateGreaterThanEqualAndFromDateLessThanAndToDateGreaterThanEqual(ZonedDateTime yearStart,ZonedDateTime yearEnd, ZonedDateTime yearStart2); 

然而,这并没有给我所有我感兴趣的记录。

感谢您的帮助!

这应该会找到所有 ManualCorrection 个具有 toDate >= yearStartfromDate <= yearEnd 的实体,这似乎是您要找的东西。

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

你应该看看the reference documentation。解释的很好。

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

Between - findByStartDateBetween … where x.startDate between ?1 and ?2

在你的情况下,看看使用 LessThanLessThanEqualGreaterThanGreaterThanEqual

的组合
  • LessThan/LessThanEqual

LessThan - findByEndLessThan … where x.start< ?1

LessThanEqual findByEndLessThanEqual … where x.start <= ?1

  • GreaterThan/GreaterThanEqual

GreaterThan - findByStartGreaterThan … where x.end> ?1

GreaterThanEqual - findByStartGreaterThanEqual … where x.end>= ?1

您可以使用运算符 AndOr 来组合两者。

您还可以使用 @Query

编写自定义查询
@Query(value = "from EntityClassTable t where yourDate BETWEEN :yearStart AND :yearEnd")
public List<EntityClassTable> getAllBetweenDates(@Param("yearStart")Date yearStart,@Param("yearEnd")Date yearEnd);

希望这对您有所帮助。谢谢:)