繁体   English   中英

仅使用 Spring Boot Data JPA/Java 8 Instant 查询日期?

[英]Query on Date only with Spring Boot Data JPA / Java 8 Instant?

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

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

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

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

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

有两种方法:

第一个:

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

第二个:

List<Orders> findBySaleTime(DateTime date);

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

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 日期最直接的方法。 (在 freenode #java 上感谢 Liste & Yawkat 以获得帮助/指针)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM