外部データベースを使用していますが、クエリでデータベース固有の関数を使用できません。
startdate
として保存されbigint
、UNIX タイムスタンプ(エポックからのミリ秒) です。
したがって、クエリではミリ秒を無視します。
WHERE ma.conversation.room IS NULL AND (ma.conversation.startdate >= :startDate AND ma.conversation.startdate <= :endDate)
そして、私のメソッドはパラメータを次のように設定します
.setParameter("startDate", startDate.getTime())
.setParameter("endDate", endDate.getTime())
これが非常に悪い考えであることはわかっていますが、データベースを変更することはできません。
テストで奇妙な結果が得られた理由がわかりません。たとえば、これは NamedQuery の私のパラメーターです。
QUERY 開始日:134 904 315 5000、終了日: 134 904 902 2000
リストの結果を印刷すると、次のようになります。
クエリ結果: startdate=2013-10-01 01:50:23, startdate time=138 058 502 3863 ......
そのクエリがこの結果をもたらすのはなぜですか??
- 138 058 502 3863 >= 134 904 315 5000 (真)
- しかし 138 058 502 3863 =< 134 904 902 2000 (真実ではありません! )
質問
>=
and=<
演算子を使用することをお勧めしますか?