2016-09-28 264 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求助/指針)