Нет простого решения, если вы хотите придерживаться подобных запросов. Значение null
преобразуется в значение bytea
. Смотрите, например, это и это .
Это значение довольно трудно преобразовать или сравнить со значением timestamp
.
Проблема не столько в первом сравнении, сколько в решении проблемы с использованием coalesce, например:
COALESCE(:createdAfter) ISNULL
потому что нет никакого сравнения между фактическими значениями и типом данных, не имеет значения. Но сравнение
sometimestamp::timestamp > null::bytea
(приводит только к показу реальных типов, поэтому не работает)
потребовалось бы больше логики для обработки процедур и исключений или около того, не уверен.
Так что, если JPQL или CriteriaQueries невозможны, у вас есть только плохие варианты:
- создать запрос, установив параметры путем конкатенации строк или около того (НЕ! И не уверен, что все работает)
- использовать
PreparedStatement
запросов, больше кода и усилий
- также, если вы используете Hibernate, используя API сеанса, как в этот ответ