5

H2/Postgresql と組み合わせてスターター jpa を使用する Spring ブート 1.4.x アプリケーションがあります。日付を Instant として格納するエンティティがあり (Instant.now() を使用、Java 8: Instant と LocalDateTime の違いは何ですか?回答に基づいて)、関連付けられたテーブルはこのフィールドをタイムスタンプとして格納します。

保存を機能させるには、インスタントを sql.Timestamps に変換するコンバーターをセットアップする必要がありました。

私の質問は、JPAリポジトリを使用してこのインスタントのみを使用して日付でクエリする簡単な方法があるかどうかです.

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

または、1 日を 2 つのインスタントに変換して中間クエリを実行する方法を見つける必要がありますか?

4

2 に答える 2

3

次の 2 つの方法があります。

1つ目:

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

2つ目:

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 日付でこれを行うのが最も簡単なようです。(ヘルプ/ポインタについては、freenode #java の Liste & Yawkat の功績)

于 2016-09-29T10:18:42.660 に答える