2016-09-28 262 views
3

我有一个Spring启动1.4.x应用程序,它将启动程序jpa与H2/Postgresql结合使用。我有一个实体将日期存储为即时(使用Instant.now(),基于Java 8: What's the difference between Instant and LocalDateTime?答案),并且关联的表将此字段存储为时间戳。只能用Spring引导数据查询日期JPA/Java 8 Instant?

对于存储工作,我不得不设置,其将立即对sql.Timestamps &反之亦然,这似乎是一个工作转换器(Timestamp.from(即时)和timestamp.toInstant())

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

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

还是我不得不找到一种方法,一天转换成两个瞬间&做查询之间的吗?

+0

如果我的回答很有帮助,请将其标记为解决方案。否则告诉我,所以我会寻找另一个答案。 – xenteros

回答

3

有两种方法:

一日一:

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

第二届一个:

List<Orders> findBySaleTime(DateTime date); 

这是值得努力挽救四舍五入尽可能日期,所以如果你只需要一天,将小时和分钟设置为所有实体的特定值。

+0

这看起来像java 7日期? – Busata

+0

我明白了,你想通过Java 8的日期......为什么你不能在你的服务中创建一个适配器? – xenteros

+0

我需要适应什么,java 8 - > java 7 date?那会有点傻吗? – Busata

1
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日期来说,这似乎是最直接的做法。 (致谢Lisp & freenode #java上的Yawkat求助/指针)