2

私はJPAを介してHibernateを使用しており、Dateプロパティの時間部分でレコードをフィルタリングする必要があります。

public class Foo {
    Date getDateTime() {
        // Returns a date and time value.
    }
}

Time startTime = ...;
Time endTime = ...;

TypedQuery<Foo> query = entityManager.createQuery("SELECT foo FROM Foo foo where :startTime <= foo.dateTime AND foo.dateTime <= :endTime", Foo.class);
query.setParameter("startTime", startTime);
query.setParameter("endTime ", endTime);

もちろん、aDateとaを直接比較することはできないため、これは機能しませんTime。これがSQLクエリの場合、DBMS固有の日付関数をいくつか使用してそれらを比較しますが、JPAで日付と時刻をどのように比較しますか?

4

3 に答える 3

3

JPA を使用している場合は、@Temporal(TemporalType.TIME) を使用できます。TIMESTAMP の時間部分のみが返されます。のように: @Temporal(TemporalType.TIME) Date getDateTime()

于 2012-11-09T04:54:42.580 に答える
1

JPA2 を使用して、既存の datetime/timestamp 列の時間 (または日付) コンポーネントのみと比較する簡単な方法または標準化された方法はありません。オプション:

  1. ネイティブ クエリを使用しますkmb385 の回答は、ミリ秒ではなく秒の精度が必要な場合に機能します。より一般的なネイティブ SQL メソッドは、CAST または EXTRACT を使用して時間コンポーネントのみと比較することだと思います。

  2. 日時の時間コンポーネントのみを保持する別の列をテーブル/ビューに追加し、それを使用して比較を行います。@Temporal(TemporalType.TIME)アノテーションを使用して、別のフィールドを Foo に追加することもできます。

于 2012-11-09T14:31:39.570 に答える