使用 Spring Data JPA 获取两个日期之间的记录

Posted

技术标签:

【中文标题】使用 Spring Data JPA 获取两个日期之间的记录【英文标题】:Get records between two dates using Spring Data JPA 【发布时间】:2020-04-17 10:53:39 【问题描述】:

在我的数据库中,有一个特定预订的开始日期和结束日期。我想获取某个开始日期和结束日期的预订记录。 到目前为止,我在 repo 中有这个,

List<Booking> findByPickupTimeAfterAndDropoffTimeBefore(Date startDate, Date endDate);

它什么也不返回,但有一条记录是我在数据库中的查询中使用的日期。

注意:我在这里使用 java.util.Date(忽略新的 LocalDateTime 包)

我在这里做错了什么?有没有其他方法可以获得我期望的数据?

【问题讨论】:

嗨。您需要使用 @Query 或 Criteria 编写自己的查询,以获取位于特定范围内的记录。 pickup_time的DB列类型是什么? @robot 不是这样。 OP 的代码应该可以工作,因为 JPA 关键字包括日期类型的 AfterBefore @robot_alien 知道查询是什么吗? @Query(value = "SELECT vehicle_vehicleID FROM booking BETWEEN Pickup_time=?1 AND dropoff_time=?2", nativeQuery = true) 这没有为我获得结果 @Bohemian 谢谢你,今天学到了新东西。 :-) 【参考方案1】:

您将 日期传递给您的 JPA 方法,就像在数据库中一样,希望返回具有这些开始/结束日期的数据,因为当日期相同,一个不是 before(或 after)另一个。

根据JPA Keywords documentation、AfterBefore 列表转换为where dateCol > parameterwhere dateCol < parameter

改用GreaterThanEqualLessThanEqual关键字的方法:

List<Booking> findByPickupTimeGreaterThanEqualAndDropoffTimeLessThanEqual(Date startDate, Date endDate);

【讨论】:

@PamudithaNavaratne 不客气。我也学到了一些东西!我找到了 JPA 支持的关键字列表,因为我需要它来回答这个问题。现在我的 JPA 功夫更好了 :)

以上是关于使用 Spring Data JPA 获取两个日期之间的记录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Data JPA 持久化 JSR-310 类型?

无法使用 Spring Data JPA 执行聚合函数并获取结果

使用日期参数时的 Spring Data JPA 日期“之间”查询问题

Spring Data JPA如何传递日期参数

带有额外列的 Spring Data JPA 多对多

从父类更新日期字段在 Spring Data Jpa 中不起作用