Ответ 1
Эквивалент команде nvl
в HQL - это команда coalesce
. coalesce(a,b)
вернет a
, если a
не является нулевым, иначе b
.
Итак, вам нужно что-то в строках:
from Table where col1 = coalesce(:par1, 'asdf')
Я пробовал это:
from Table where (:par1 is null or col1 = :par1)
но бывает, что
from Table where :par1 is null
всегда возвращает все строки таблицы, даже если: par1 не является нулевым.
а
select * from table where col1 = 'asdf'
не возвращает строку.
Я не могу использовать собственные грамматики, потому что мое приложение должно работать на разных ядрах базы данных
Эквивалент команде nvl
в HQL - это команда coalesce
. coalesce(a,b)
вернет a
, если a
не является нулевым, иначе b
.
Итак, вам нужно что-то в строках:
from Table where col1 = coalesce(:par1, 'asdf')
Если ваша базовая база данных - это Oracle, то вы можете использовать функцию nvl, я попробовал ее, и это сработало для меня.
Query query = session.createQuery(
" select ft from FeatureToggle ft left outer join ft.featureToggleCustomerMap "
+ " ftcm where nvl(ftcm.custId,:custId) = :custId");
query.setParameter("custId", Long.valueOf(custId));
Ваш вариант использования может быть различным, и вы можете использовать функцию nvl в соответствии с вашим требованием, если база данных nvl, а не уверенность в реализации других баз данных, поскольку я использовал этот код только для Oracle. Надеюсь, что это поможет.