В спецификации JPA указано, что
3.8.13 Именованные запросы
Именованные запросы: статические запросы , выраженные в метаданных. Именованные запросы могут быть определены на языке запросов Java Persistence или в SQL. Имена запросов относятся к единице сохранения.
Таким образом, вы не можете ожидать, что они изменятся во время выполнения в зависимости от какого-либо нулевого условия. Критерии Query, как вы указываете, по своей природе динамичен, так что будет лучше.
РЕДАКТИРОВАТЬ на основе комментария:
AND (ord.quoteNumber = :quoteNumber or :quoteNumber is null or :quoteNumber = ''
не изменяет запрос во время выполнения (не пропускает предложение). Это оценивает предложение как ИСТИНА. Проблема с DB2 (и насколько я знаю, с Derby) состоит в том, что они не позволяют "нетипизированному Null отправляться на сервер" согласно API PreparedStatement.setObject, Вы можете проверить это, установив тип с помощью приведения
AND (ord.quoteNumber = cast(:dfdTxt as integer) or cast(:dfdTxt as integer) is null or cast(:dfdTxt as integer) = ''
Таким образом, этот подход специфичен для реализации БД и может измениться в какой-то момент.