Saya telah meluangkan waktu untuk melihat ini karena saya benar-benar ingin membandingkan "tanggal adalah nol" dalam kueri dan itulah hasilnya:
Saat Anda menggunakan "pemeran(foo.date as date) adalah null ", itu berfungsi dengan baik jika bidangnya bukan nol. Jika bidangnya nol, pengecualian ini dilempar:
org.postgresql.util.PSQLException: ERROR: cannot cast type bytea to date
Solusinya adalah gunakan penggabungan:
coalesce(:date, null) is null
Ini berfungsi dengan baik jika data di lapangan diuji atau tidak.
Contoh kueri saya:
@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)"
+ " )"
+ " )"
+ " ) "
Semoga berhasil untuk Anda!