Вопрос

Я попробовал это:

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.Надеюсь, поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top