Pergunta

Eu tentei o seguinte:

from Table where (:par1 is null or col1 = :par1)

Mas acontece que

from Table where :par1 is null

Sempre retorna todas as linhas da tabela, mesmo que o: PAR1 não seja nulo.

enquanto

 select * from table where col1 = 'asdf'

não retorna nenhuma linha.

Não posso usar gramáticas nativas porque meu aplicativo deve ser executado em diferentes mecanismos de banco de dados

Foi útil?

Solução

O equivalente ao nvl Comando em HQL é o coalesce comando. coalesce(a,b) retornará a E se a não é nulo, caso contrário b.

Então você gostaria de algo nas linhas de:

from Table where col1 = coalesce(:par1, 'asdf')

Outras dicas

Se o seu banco de dados subjacente for o Oracle, você pode usar a função NVL, eu tentei e funcionou para mim.

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));

Seu caso de uso pode ser diferente e você pode usar a função NVL conforme o seu requisito se o banco de dados for NVL, não tem certeza sobre a implicação dos outros bancos de dados, pois usei esse código apenas para o Oracle. Espero que ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top