PostgreSQLのタイムスタンプ列にHibernateで日付クエリ
-
23-09-2019 - |
質問
Aテーブルは、タイムスタンプ列を有しています。その中のサンプル値は、2010年3月30日夜1時42分42秒である可能性があります。 Hibernateで、私は範囲クエリRestrictions.between( "列名"、fromDateから、toDateまでを)やってます。
次のようにこの列のHibernateのマッピングがある。
<property name="orderTimestamp" column="order_timestamp" type="java.util.Date" />
次のようにレッツ言うが、私は日付の30日を持っているすべてのレコードを知りたい、この分野での2010年3月および3月31日、2010年A範囲クエリが実行されます。
Date fromDate = new SimpleDateFormat("yyyy-MM-dd").parse("2010-03-30");
Date toDate = new SimpleDateFormat("yyyy-MM-dd").parse("2008-03-31");
Expression.between("orderTimestamp", fromDate, toDate);
この仕事をしません。
クエリは、「2010-03-30夜12時00分00秒」と「2010-03-31夜12時00分00秒」と、それぞれのタイムスタンプに変換されます。だから、2010年3月31日のすべてのレコードは無視されます。
この問題に対する簡単な解決策は、と終了日を持っている可能性があり、「2010年3月31日午後11時59分59秒。」しかし、私は、タイムスタンプ列の日付のみの一部を一致させる方法があるかどうかを知りたいと思います。
また、両方の制限のExpression.between()
を含めているのですか?ドキュメントは、この上の任意の光をスローしません。
正しい解決策はありません
他のヒント
あなたはTIMESTAMPをしたくない場合は、、私はタイムスタンプ列の日付のみの一部を一致させる方法があるかどうかを知りたいと思います。
は、DATEを使用する(そしてあなたがtype="date"
を使用しないでください)。
はまた、両方の限界のExpression.between()包括的ですか?
演算子BETWEEN SQLの動作はデータベースに依存のようです。
:PosgresQL、BETWEEN式でx BETWEEN y AND z
は意味的に等価です
y <= x AND x <= z
すなわち。包括ます。
"2010年3月31日夜十一時59分59秒。"境界条件は、潜在的に危険である:夜11時59分59秒と夜12時〇〇分00秒の間、システム内の取引があった場合、あなたはそれを逃すと思います。あなたは毎日十分な取引と十分な長さの期間を持っている場合は、報告書は破るために起こっている、あなたは理由を見つけるために時間を費やすだろう。
のPostgreSQL between
は制限は、それがないようにを含みますさえ2010-04-01 00:00:00に終了日を設定して安全です。使用LT()とGT()確認する。
たぶん、あなたはDATEにorderTimestampをキャストすることができます。 HQL はサポートを持っていますこのためます。
使用キャスト(your_data、日付)は、低くなければならないキャスト関数の第二引数を覚えている、またはそれ文句を言わない仕事ます。
肥満児:サミュエル\ Maycon