5

我有一个 Spring boot 1.4.x 应用程序,它使用 starter jpa 和 H2/Postgresql。我有一个将日期存储为 Instant 的实体(使用 Instant.now(),基于Java 8:Instant 和 LocalDateTime 之间有什么区别?答案),并且关联的表将此字段存储为时间戳。

为了使存储工作,我必须设置一个转换器,将 Instant 转换为 sql.Timestamps,反之亦然,这似乎有效(Timestamp.from(instant) 和 timestamp.toInstant())

我的问题是,是否有一种直接的方法来查询 Date 仅使用此即时使用 JPA 存储库,例如。

List<Orders> findBySaleTime(.... day)

或者我是否被迫找到一种方法将一天转换为两个瞬间并在中间查询?

4

2 回答 2

3

有两种方法:

第一个:

List<Orders> findBySaleTimeBetween(DateTime start, DateTime end);

第二个:

List<Orders> findBySaleTime(DateTime date);

值得尝试保存尽可能四舍五入的日期,因此如果您只需要日期,请将小时和分钟设置为所有实体的特定值。

于 2016-09-28T22:06:45.220 回答
2
public List<SaleOrder> findByDate(String date) {
    Instant startOfDay = Instant.parse(date).truncatedTo(ChronoUnit.DAYS);
    Instant endOfDay = startOfDay.plus(Duration.ofDays(1));

    return saleOrderRepository.findBySaleTimeAfterAndSaleTimeBefore(startOfDay, endOfDay);
}

日期是从客户端传递的 UTC 日期,这似乎是使用 java 8 日期最直接的方法。(感谢 Liste 和 Yawkat 在 freenode #java 上的帮助/指针)

于 2016-09-29T10:18:42.660 回答