クエリで「日付がnull」を本当に比較したいので、これを調べるのに少し時間を費やしました。それが結果です:
「cast(foo.dateasdate)はnullです」を使用する場合 "、フィールドがnullでない場合は正常に機能します。フィールドがnullの場合、この例外がスローされます:
org.postgresql.util.PSQLException: ERROR: cannot cast type bytea to date
解決策は合体を使用することです:
coalesce(:date, null) is null
現場でデータをテストしてもしなくても問題なく動作します。
私のクエリ例:
@Query("SELECT c "
+ " FROM Entity c "
+ " WHERE "
+ " and ( (coalesce(:dateFrom, null) is null and coalesce(:dateUntil, null) is null) "
+ " or ((coalesce(c.date, null) is not null) "
+ " and ( "
+ " ((coalesce(:dateFrom, null) is null and coalesce(:dateUntil, null) is not null) and c.date <= :dateUntil) "
+ " or ((coalesce(:dateUntil, null) is null and coalesce(:dateFrom, null) is not null) and c.date >= :dateFrom)"
+ " or (c.date between :dateFrom and :dateUntil)"
+ " )"
+ " )"
+ " ) "
それがあなたのために働くことを願っています!