使用 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 关键字包括日期类型的 After
和 Before
@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、After
和Before
列表转换为where dateCol > parameter
和where dateCol < parameter
。
改用GreaterThanEqual
和LessThanEqual
关键字的方法:
List<Booking> findByPickupTimeGreaterThanEqualAndDropoffTimeLessThanEqual(Date startDate, Date endDate);
【讨论】:
@PamudithaNavaratne 不客气。我也学到了一些东西!我找到了 JPA 支持的关键字列表,因为我需要它来回答这个问题。现在我的 JPA 功夫更好了 :)以上是关于使用 Spring Data JPA 获取两个日期之间的记录的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring Data JPA 持久化 JSR-310 类型?
无法使用 Spring Data JPA 执行聚合函数并获取结果