次のクエリがあります。
StringBuilder sb = new StringBuilder("select e from Event e");
sb.append(" where e.user = :user and e.activated = true and e.startDate <= :date and uc.endDate >= :date");
Query query = this.getEntityManager().createQuery(sb.toString());
query.setParameter("user", user);
query.setParameter("date", date);
Dateが標準の場合Java dateオブジェクトとstartDate、endDateは時刻のないPostgresql日付です(たとえば、データベースでは「2014-04-03」のようになります)
しかし、指定された日付パラメーターがstartDate列と同じ日である場合、一致するものが見つからないことがわかりました。 '<='の '='がこれに対処すると思いましたか?
1つは完全なタイムスタンプで、もう1つは単なる日付であるため、これが発生していると思いますか?私はすでに他の同様の質問からの提案を試しました...
-SimpleDateFormatを使用して日付をyyyy-MM-ddパターンに変換し、次にDATE()を使用してHQLにキャストします
-パラメータとして設定する前に、カレンダーを使用して時間コンポーネントを削除する
-day(e.startDate)<= day(date)AND month(e.startDate)= month(date)などを使用します。
しかし、どれもうまくいきませんでした。だから私の質問は、なぜこの日付比較が機能しないのか、そして/またはパラメータを日付に正しくキャストするにはどうすればよいですか?
PostgreSQL 9.0 | JPA |休止状態3.6
ありがとう!
Query.setDate()
、 Query.setTimestamp()
メソッドを確認し、Query.setParameter()
の代わりに正しいメソッドを使用してください。
以下のようなもの:-
Query q = em.createQuery("select o from LoadFileHistory o where o.finishDate > :today ");
q.setParameter("today",todaysDateObject,TemporalType.DATE);
q.getResultList();
select o from Operation o
where o.merchantId = :merchantId
and o.captureLimitDate < :maxDateTime
query.setParameter("maxDateTime", maxDateTime, TemporalType.TIMESTAMP);